codeforces 552c[补]

本文讲解了一道关于使用不同质量的砝码来平衡天平的问题。通过将物体质量转换为特定进制,分析每位数来判断是否能用给定砝码实现平衡。提供了解题思路与实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值