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 105
using 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");
}