• 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
    "):printf("NO
    ");
    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
    ");return 0;}
    43     }
    44     else {printf("YES
    ");return 0;}
    45     printf("NO
    ");
    46     return 0;
    47 }
    48 
    49 int sb=hh();
    50 int main(int argc,char**argv) {;}
    错误代码
  • 相关阅读:
    css之选择器及性能优化
    css之font
    css之background
    Oracle 学习笔记(十)
    数据库脚本开发日志模板 —— 项目需求 A
    Java 程序动态替换 docx 模板中定制值的实现例子
    Quartz 定时器 Cron 表达式 怎么破?
    Tomcat 启动报错;ERROR: transport error 202: bind failed: Address already in use
    Oracle 学习笔记(九)
    Oracle 学习笔记(八)
  • 原文地址:https://www.cnblogs.com/whistle13326/p/7562436.html
Copyright © 2020-2023  润新知