您的位置:首页 > 其它

nefuoj-1120:天平称重

2016-02-02 09:45 190 查看

description

字符串现在有好多种砝码,他们的重量是 w^0,w^1,w^2,...   每种各一个。问用这些砝码能不能表示一个重量为m的东西。

input

多组测试数据。
第一行有两个整数w,m (3 ≤ w ≤ 10^9, 1 ≤ m ≤ 10^9)。

output

如果能,输出YES,否则输出NO。

sample_input

3 7
3 12

sample_output

NO
YES
题解:这道题就是简单的贪心算法的题,只要有勇气做下去就能ac;
code:#include <cstdio>#include <iostream>using namespace std;long long int a[100000000];//定义数组用来存不同指数幂的数,定小了会ce,所以干脆定一个特别大的数组;int main(){long long int w,m;//数据范围接近1000,000,000,接近int极限,所以用longlong比较保险;while(~scanf("%lld%lld",&w,&m)){a[0]=1;//注意int i;for(i=1 ; ; i++)//这里进行循环来保存不同的指数的数{a[i]=a[i-1]*w;if(a[i]>m)break;}//这里注意最后的a[i]是一个比m大的数哦;//这里是贪心算法的核心,每次都减去不大于m的w的i次幂,判断最后能不能是m恰好为0;while(m&&i)//跳出条件:m恰好为0,即满足条件,或者i变成0依旧没能使m为0,即不能满足条件;{--i;if(a[i]<=m)//注意m-=a[i];}if(m==0)puts("YES");//puts语句自带‘\n’哦;elseputs("NO");}return 0;}
补充:在函数以外定义数组一般最大只能定义到1000,000,000左右,函数内最大定义到60,000;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: