链接:点击打开链接
题意:现在有好多种砝码,他们的重量是 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; }