现在有好多种砝码,他们的重量是 w0,w1,w2,... 每种各一个。问用这些砝码能不能表示一个重量为m的东西。
样例解释:可以将重物和3放到一个托盘中,9和1放到另外一个托盘中。
第一行有两个整数w,m (2 ≤ w ≤ 10^9, 1 ≤ m ≤ 10^9)。
3 7
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;
}