51nod 1449 贪心

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1449

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 }


 

原文地址:https://www.cnblogs.com/zzqc/p/7462130.html