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 题意描述好操蛋,最后才发现是w的形式,一直以为是wk小下标呢,,,, 如果可以表示的话有两种形式分别是
w+w+w+......=m; w+w+w+....+m=w+w+w+......;
显然无m的一端可以用一个w进制的01串表示出来,因为每个砝码只有一个,所以有m的一端也要能这样表示出来才可,先把m用w进制表示出来,由低位开始递推。
如果这一位是01就跳过表示将对应的砝码放另一边,如果不是得话,只能考虑往这一位放砝码使其进位,不可行直接输出"NO",一直到最后。
#include<bits/stdc++.h>
using namespace std;
#define LL long long
LL a[];
int main()
{
LL w,m,p=,i,j,k;
cin>>w>>m;
while(m){
a[p++]=m%w;
m/=w;
}
for(i=;i<p;++i)
{
if(a[i]==||a[i]==) continue;
if(a[i]==w-||a[i]==w) a[i+]++;
else{
puts("NO");
return ;
}
}
puts("YES");
return ;
}