题目链接
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"; }