51 nod 砝碼稱重(貪心+進位制轉換思想)
阿新 • • 發佈:2019-02-05
現在有好多種砝碼,他們的重量是 w0,w1,w2,... 每種各一個。問用這些砝碼能不能表示一個重量為m的東西。
樣例解釋:可以將重物和3放到一個托盤中,9和1放到另外一個托盤中。
Input單組測試資料。
第一行有兩個整數w,m (2 ≤ w ≤ 10^9, 1 ≤ m ≤ 10^9)。 Output如果能,輸出YES,否則輸出NO。 Sample Input
3 7Sample Output
YES
挺難想的 m能否用天平稱出來的關鍵是如何使天平平衡
如果物體m可以被稱出來 可表示為 m + 一堆砝碼(可能為0)= 另一堆砝碼
由於砝碼的重量是冪的形式並且個數只有一個
所以我們取出的一堆砝碼的重量就可以表示為w進位制下 一個由 0 1 組成的串
基於此 我們可以將m也轉化成w進位制
現在 判斷物體m是否可以被稱出來 就變成了 m + 一個w進位制下由 0 1 組成的串 是否可以組成一個新的由 0 1 組成的串(另一堆砝碼)
當由m轉化成的w進位制的某一位為0或者1時 給他它+0(理解為不作處理) 如果為w-1時 我們就給它+1(相當於加一個砝碼) 使其進位 本位變為0 如果是其他情況 就不能轉化成 0 1 組成的串 所以就不能稱出
AC程式碼:
#include <stdio.h> int main (){ int w,m; scanf ("%d%d",&w,&m); while (m){ if (m%w==0||m%w==1){ m=m/w; } else if (m%w==w-1){ m=(m+1)/w; } else { printf ("NO\n"); return 0; } } printf ("YES\n"); return 0; }