51nod 1449 砝码称重【天平/进制】

来源:互联网 发布:mac win10双系统切换 编辑:程序博客网 时间:2024/05/01 22:20
题意:
给你w,n,问你在w^0,w^1,w^2...各种一个,问你能不能用这些砝码和重量为m的东西放在天平上使得天平平衡;
思路:
这个很容易联想到进制:
如果把m放在是一边的话,其实对于砝码就是纯粹的相加,能不能被表示成这样一个进制,每个位上就是是0或1
那么如果两边都要放呢?
所以就是说我要怎么利用m和已拥有的,构造一个仅有01的进制数
为什么这么说呢?因为是左边右边等价啊;

然后从低位往高位处理,保证砝码利用次数<=1;

#include <bits/stdc++.h>using namespace std;typedef long long LL;typedef unsigned long long ULL;typedef pair<int,int>PII;const double eps=1e-5;const double pi=acos(-1.0);//const int mod=1e9+7;const int INF=0x3f3f3f3f;int w,n;int bit[35];int num;void init(){    num=0;    while(n)    {        bit[num++]=n%w;        n/=w;    }}int main(){    scanf("%d%d",&w,&n);    init();    for(int i=0;i<num;i++)    {        if(bit[i]>=w)        {            bit[i]-=w;            bit[i+1]++;        }        if(bit[i]<=1)   //0就用,1就不用            continue;        else if(bit[i]==w-1)    //和m一边的+w^(i-1)使得另一边只要+w^i的就行;            bit[i+1]++;        else        {            puts("NO");            return 0;        }    }    puts("YES");    return 0;}


0 0
原创粉丝点击