codeforces 552c[补]

来源:互联网 发布:洗洁精 知乎 编辑:程序博客网 时间:2024/05/21 15:26

BNUZ比赛训练【补】

大概是给砝码的题吓傻过。。看到砝码就不会写了。。一道进制的傻逼题。


题目:
http://codeforces.com/problemset/problem/552/C

题目大概意思:
有101个砝码,每种只能用一次,他们的质量是w的i次方(1 <= i <= 100),另外有一个质量为m的物品,需要你判断,用质量为w的101个砝码能不能将天平搞平衡


思路:
将m化为w进制,对于每一位:
如果该位是0,那不需要管他,
如果是1,则需要在另一边放一个砝码,所以处理的时候也不需要管他
如果是w-1,则需要再同边放一个砝码,那么他的下一位数要+1
如果当前位数的数超过了w,则需要进制
其他情况,都不能在用一个砝码的情况下使得天平平衡


代码如下:

/*@resouces: codeforces 552C@date: 2017-3-3@author: QuanQqqqq@algorithm: digit 砝码进制 */#include <bits/stdc++.h>#define maxn 105using namespace std;int bits[maxn];int main(){    int w,m;    scanf("%d %d",&w,&m);    int len = 0;    while(m){        bits[len++] = m % w;        m /= w;    }    bool flag = true;    for(int i = 0;i <= len;i++){        if(bits[i] >= w){            bits[i + 1]++;            bits[i] -= w;        }        if(bits[i] <= 1){            continue;        } else if(bits[i] + 1 == w) {            bits[i + 1]++;        } else {            flag = false;            break;        }    }    flag ? puts("YES") : puts("NO");}
0 0
原创粉丝点击