题目链接
http://codeforces.com/problemset/problem/552/C
题意:
利用已知的w0, w1, w2, ..., w100
这101个砝码,用天平算出m的质量
思路:
根据给的砝码,我们可以想到利用w进制来表示这些砝码,那么每个砝码的大小就是1,10,100.......
然后要计算出m的质量,我们将m也表示为w进制的数
然后对于每位数我们进行分析
每个砝码存在三种情况不取,取,减去(*0,*1,*-1)
因为砝码的为1,10,100,1000,,,,
m的第i位数,如果是0,1,那么第i个砝码可以选择不取,和取
如果是w-1,那么就加上第i个砝码使这位数为0,同时下一位数要+1
如果是w,那么就下一位数+1
最后如果每位数都满足条件则可以算出m的质量
下面是代码:
</pre><pre name="code" class="cpp">#include <algorithm>
#include <cstdio>
#include <iostream>
#define MAX 105
int mp[MAX];
using namespace std;
int main(void)
{
int w,m,p;cin >> w >> m;
int ans = 0,flag = 1;
while(m){
mp[++ans]=m%w;
m/=w;
}
for(int i = 1;i<=ans;i++){
if(mp[i]==0 || mp[i]==1)continue;
if(mp[i]==w-1 || mp[i]==w){mp[i+1]++;continue;}
else{
flag = 0;
break;
}
}
if(flag)cout << "YES";
else cout << "NO";
}