nefuoj-1120:天平称重

来源:互联网 发布:吴昕开的淘宝店叫什么 编辑:程序博客网 时间:2024/06/02 13:25

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 73 12

sample_output

NOYES
题解:这道题就是简单的贪心算法的题,只要有勇气做下去就能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’哦;        else        puts("NO");    }    return 0;}
补充:在函数以外定义数组一般最大只能定义到1000,000,000左右,函数内最大定义到60,000;

1 0
原创粉丝点击