• 51nod 1449 贪心


    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=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

    题意描述好操蛋,最后才发现是wk的形式,一直以为是wk小下标呢,,,, 如果可以表示的话有两种形式分别是
    wa+wb+wc+......=m; wa+wb+wc+....+m=wA+wB+wC+......;
    显然无m的一端可以用一个w进制的01串表示出来,因为每个砝码只有一个,所以有m的一端也要能这样表示出来才可,先把m用w进制表示出来,由低位开始递推。
    如果这一位是01就跳过表示将对应的砝码放另一边,如果不是得话,只能考虑往这一位放砝码使其进位,不可行直接输出"NO",一直到最后。
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define LL  long long
     4 LL a[105];
     5 int main()
     6 {
     7     LL w,m,p=0,i,j,k;
     8     cin>>w>>m;
     9     while(m){
    10         a[p++]=m%w;
    11         m/=w;
    12     }
    13     for(i=0;i<p;++i)
    14     {
    15         if(a[i]==0||a[i]==1) continue;
    16         if(a[i]==w-1||a[i]==w) a[i+1]++;
    17         else{
    18             puts("NO");
    19             return 0;
    20         }
    21     }
    22     puts("YES");
    23     return 0;
    24 }
    
    
    
     
    
    
  • 相关阅读:
    算法:二分图最大独立集
    算法:桶排序
    算法:二分图最小点覆盖——Konig定理
    jQuery基础整理之思维导图
    vue基础知识整理
    HTML总结
    JAVAScript总结
    栈和队列
    今日学习遇到的问题(2018.9.23)
    看了vue文档之后。。。。
  • 原文地址:https://www.cnblogs.com/zzqc/p/7462130.html
Copyright © 2020-2023  润新知