http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1449
题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
收藏
关注
现在有好多种砝码,他们的重量是 w0,w1,w2,... 每种各一个。问用这些砝码能不能表示一个重量为m的东西。
样例解释:可以将重物和3放到一个托盘中,9和1放到另外一个托盘中。
Input
单组测试数据。 第一行有两个整数w,m (2 ≤ w ≤ 10^9, 1 ≤ m ≤ 10^9)。
Output
如果能,输出YES,否则输出NO。
Input示例
3 7
Output示例
YES
题意描述好操蛋,最后才发现是wk的形式,一直以为是wk小下标呢,,,, 如果可以表示的话有两种形式分别是
wa+wb+wc+......=m; wa+wb+wc+....+m=wA+wB+wC+......;
显然无m的一端可以用一个w进制的01串表示出来,因为每个砝码只有一个,所以有m的一端也要能这样表示出来才可,先把m用w进制表示出来,由低位开始递推。
如果这一位是01就跳过表示将对应的砝码放另一边,如果不是得话,只能考虑往这一位放砝码使其进位,不可行直接输出"NO",一直到最后。
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define LL long long 4 LL a[105]; 5 int main() 6 { 7 LL w,m,p=0,i,j,k; 8 cin>>w>>m; 9 while(m){ 10 a[p++]=m%w; 11 m/=w; 12 } 13 for(i=0;i<p;++i) 14 { 15 if(a[i]==0||a[i]==1) continue; 16 if(a[i]==w-1||a[i]==w) a[i+1]++; 17 else{ 18 puts("NO"); 19 return 0; 20 } 21 } 22 puts("YES"); 23 return 0; 24 }