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


    题意:
    给你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;
    }
    
    
    
    
    
    


  • 相关阅读:
    JavaScript事件详解
    JavaScript事件
    十六进制转十进制原理
    java:数组复制
    java:数组扩容
    MySQL---Day2
    Pyhton学习——Day47
    MySQL---Day1
    Pyhton学习——Day46
    Someing-About-Work
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777514.html
Copyright © 2020-2023  润新知