题目链接:http://codeforces.com/problemset/problem/552/C
题目大意:
有101个砝码重量为w^0,w^1,....,w^100和一个重量为m的物体,问能否在天平两边放物品和砝码使其平衡。
解题思路:
将m化为w进制的数,接下来从低到高遍历没一位:
如果第i位是0那OK;
如果是1那就要把砝码wi放在天平另一边抵消;
如果是w-1那就要把砝码wi放到天平同一边,使其变为0并进位,这时第i+1位的权+1;
而如果是其他情况,那么肯定不能平衡了。
代码:
#include<bits/stdc++.h>
#define lc(a) (a<<1)
#define rc(a) (a<<1|1)
#define MID(a,b) ((a+b)>>1)
#define fin(name) freopen(name,"r",stdin)
#define fout(name) freopen(name,"w",stdout)
#define clr(arr,val) memset(arr,val,sizeof(arr))
#define _for(i,start,end) for(int i=start;i<=end;i++)
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
typedef long long LL;
const int N=5e6+;
const int INF=0x3f3f3f3f;
const double eps=1e-; int a[]; int main(){
FAST_IO;
int w,m;
cin>>w>>m;
int cnt=;
while(m){
a[cnt++]=m%w;
m/=w;
}
bool flag=true;
for(int i=;i<;i++){
if(a[i]>=w){
a[i+]+=a[i]/w;
a[i]%=w;
}
if(a[i]!=){
if(a[i]==w-)
a[i+]++;
else if(a[i]==)
;
else{
flag=false;
break;
}
}
}
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return ;
}