51nod1449&&Codeforce 552C

来源:互联网 发布:i219v网卡驱动 ubuntu 编辑:程序博客网 时间:2024/06/07 10:50

链接:点击打开链接

题意:现在有好多种砝码,他们的重量是 w,w*w,w*w*w... 每种各一个。问用这些砝码能不能表示一个重量为m的东西。样例解释:可以将重物和3放到一个托盘中,91放到另外一个托盘中。

代码:

#include <vector>#include <stdio.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;int main(){    long long w,m,i,j,sign;    vector<long long> v;    while(scanf("%I64d%I64d",&w,&m)!=EOF){        sign=0;        v.clear();        while(m){                   //如果没有天平相当于物品重量必须是w进制的01串,因此加上天平后            v.push_back(m%w);       //相当于问m能否表示成两个w进制的01串            m/=w;        }        for(i=0;i<v.size();i++){                if(v[i]==0||v[i]==1)            continue;            else if(v[i]==w-1){                v[i]=0;                v[i+1]++;            }            else if(v[i]>=w){                v[i]-=w;                v[i+1]++;            }            else{                sign=1;                break;            }        }        if(sign)        puts("NO");        else        puts("YES");    }    return 0;}



 

0 0
原创粉丝点击