链接:点击打开链接
题意:现在有好多种砝码,他们的重量是 w,w*w,w*w*w... 每种各一个。问用这些砝码能不能表示一个重量为m的东西。样例解释:可以将重物和3放到一个托盘中,9和1放到另外一个托盘中。
代码:
#include <vector>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
long long w,m,i,j,sign;
vector<long long> v;
while(scanf("%I64d%I64d",&w,&m)!=EOF){
sign=0;
v.clear();
while(m){ //如果没有天平相当于物品重量必须是w进制的01串,因此加上天平后
v.push_back(m%w); //相当于问m能否表示成两个w进制的01串
m/=w;
}
for(i=0;i<v.size();i++){
if(v[i]==0||v[i]==1)
continue;
else if(v[i]==w-1){
v[i]=0;
v[i+1]++;
}
else if(v[i]>=w){
v[i]-=w;
v[i+1]++;
}
else{
sign=1;
break;
}
}
if(sign)
puts("NO");
else
puts("YES");
}
return 0;
}