1449 砝码称重

1449 砝码称重

题目来源: CodeForces

基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题

现在有好多种砝码,他们的重量是 w0,w1,w2,...  每种各一个。问用这些砝码能不能表示一个重量为m的东西。

样例解释:可以将重物和3放到一个托盘中,9和1放到另外一个托盘中。

Input

单组测试数据。
第一行有两个整数w,m (2 ≤ w ≤ 10^9, 1 ≤ m ≤ 10^9)。

Output

如果能,输出YES,否则输出NO。

Input示例

3 7

Output示例

YES

类似二进制思想 把w转化成w进制的数 构成一个01串 因为每个砝码只能用一次当余数是0 1的时候  m一定可以用w来表示 若补1 可以被整除的的话 也是可以用w表示 其实就是在m这边加一个砝码使两边平衡否则就无法用w表示

 1 #include <cctype>
 2 #include <cstdio>
 3 #include <iostream>
 4
 5 int n,k;
 6
 7 bool flag;
 8
 9 int hh() {
10     scanf("%d%d",&n,&k);
11     flag=true;
12     while(k) {
13         if(k%n==0||k%n==1) k/=n;
14         else if((k+1)%n==0) k=(k+1)/n;
15         else {
16             flag=false;
17             break;
18         }
19     }
20     flag?printf("YES\n"):printf("NO\n");
21     return 0;
22 }
23
24 int sb=hh();
25 int main(int argc,char**argv) {;}

代码

我一个错误的贪心竟然只WA了5个点。。

 1 #include <cctype>
 2 #include <cstdio>
 3 #include <iostream>
 4
 5 typedef long long LL;
 6
 7 const int MAXN=100;
 8
 9 LL m,k;
10
11 LL q[MAXN];
12
13 inline LL quick_pow(LL a,int b) {
14     LL ans=1;
15     while(b) {
16         if(b&1) ans*=a;
17         b>>=1;
18         a*=a;
19     }
20     return ans;
21 }
22
23 inline bool judge() {
24     LL t=k,i=1;
25     q[0]=1;
26     while(true) {
27         q[i]=quick_pow(m,i);
28         if(q[i]>k) break;
29         ++i;
30     }
31     for(int j=i;j>=0;--j) {
32         if(t-q[j]>=0) t-=q[j];
33         if(t==0) return true;
34     }
35     return false;
36 }
37
38 int hh() {
39     std::cin>>m>>k;
40     if(!judge()) {
41         k+=m;
42         if(judge()) {printf("YES\n");return 0;}
43     }
44     else {printf("YES\n");return 0;}
45     printf("NO\n");
46     return 0;
47 }
48
49 int sb=hh();
50 int main(int argc,char**argv) {;}

错误代码

时间: 2024-12-08 15:39:08

1449 砝码称重的相关文章

51nod 1449 砝码称重 (进制思想)

1449 砝码称重 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 现在有好多种砝码,他们的重量是 w0,w1,w2,...  每种各一个.问用这些砝码能不能表示一个重量为m的东西. 样例解释:可以将重物和3放到一个托盘中,9和1放到另外一个托盘中. Input 单组测试数据. 第一行有两个整数w,m (2 ≤ w ≤ 10^9, 1 ≤ m ≤ 10^9). Output 如果能,输出YES,否则输出NO.

51nod 1449 砝码称重(贪心算法)

题目:传送门. 题意:中文题. 题解:左物右码,w进制.m%w==0||m%w==1||m%w==w-1都是可以的,否则是NO. #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> using namespace std; int main() { //左物右码 开始把物品放在左边 long long w,m;

1449 砝码称重(思维)

题目链接:https://www.51nod.com/onlineJudge/submitDetail.html#!judgeId=259281 题解:这题有一个技巧,毕竟是w^0,w^1,w^2....这样,必然会想到w进制,而且就只能用一次. 那么就简单了,把m拆成w进制,然后就自行解决了. #include <iostream> #include <cstring> using namespace std; typedef long long ll; ll num[40];

2144 砝码称重 2

2144 砝码称重 2 http://codevs.cn/problem/2144/ 题目描述 Description 有n个砝码,现在要称一个质量为m的物体,请问最少需要挑出几个砝码来称? 注意一个砝码最多只能挑一次 输入描述 Input Description 第一行两个整数n和m,接下来n行每行一个整数表示每个砝码的重量. 输出描述 Output Description 输出选择的砝码的总数k,你的程序必须使得k尽量的小. 样例输入 Sample Input 3 10591 样例输出 Sa

【dp】砝码称重

砝码称重 来源:NOIP1996(提高组)  第四题 [问题描述]     设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000),用他们能称出的重量的种类数. [输入文件]   a1  a2  a3  a4  a5  a6     (表示1g砝码有a1个,2g砝码有a2个,…,20g砝码有a6个,中间有空格). [输出文件]   Total=N     (N表示用这些砝码能称出的不同重量的个数,但不包括一个砝码也不用的情况). [输入样例]     1 1 0 0 0

HFUT 1354.砝码称重(安徽省2016“京胜杯”程序设计大赛 A)

砝码称重 Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 12 Accepted: 10 Description 小明非常喜爱物理,有一天,他对物理实验室中常用的弹簧拉力计产生了兴趣.实验室中有两种质量不同的砝码,小明分别用a个第一种砝码放在弹簧拉力计上和b个第二种砝码放在弹簧拉力计上,假设每增加单位重量的砝码,弹簧拉力计的长度增加1,那么两次称量弹簧拉力计的长度差是多少呢?(假设拉力计不发生非弹性形变) Input 第

砝码称重问题二

题目描述 有一组砝码,重量互不相等,分别为m1.m2.m3……mn:它们可取的最大数量分别为x1.x2.x3……xn. 现要用这些砝码去称物体的重量,问能称出多少种不同的重量. 现在给你两个正整数列表w和n, 列表w中的第i个元素w[i]表示第i个砝码的重量,列表n的第i个元素n[i]表示砝码i的最大数量.  i从0开始                   请你输出不同重量的种数.如:w=[1,2], n=[2,1], 则输出5(分析:共有五种重量:0,1,2,3,4) 解题 参考智力题砝码称重

蓝桥杯——说好的进阶之砝码称重(贪心算法)

5个砝码 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量. 如果只有5个砝码,重量分别是1,3,9,27,81.则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中). 本题目要求编程实现:对用户给定的重量,给出砝码组合方案. 例如: 用户输入: 5 程序输出: 9-3-1 用户输入: 19 程序输出: 27-9+1 要求程序输出的组合总是大数在前小数在后. 可以假设用户的输入的数字符合范围1~121. public static void main(String

J - 砝码称重 改自51nod1449

J - 砝码称重 Time Limit: 2000/1000 MS (Java/Others)      Memory Limit: 128000/64000 KB (Java/Others) Submit Status Problem Description 有一个物品和一些已知质量的砝码和天平,问能不能用这些砝码称出这个物品的重量(天平两边都可以放砝码) Input 多样例输入,样例数<=20000 对于每个样例: 第一行输入两个数n,m,表示砝码数量和重物质量,1 ≤ m ≤ 1018 第