zoukankan      html  css  js  c++  java
  • 1449 砝码称重 1 秒 (贪心)

    1449 砝码称重
    1 秒 131,072 KB 40 分 4 级题
    现在有好多种砝码,他们的重量是 w0,w1,w2,... 每种各一个。问用这些砝码能不能表示一个重量为m的东西。

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

    思路:

    w进制算法,
    如果没有天平,只是这些砝码表示m的话,只需要将m表示成w进制数,然后要求每一位不是0就是1.(每个质量的砝码只有一个,要么放,要么不放)
    现在有这个天平,n这个数就是 两个 0 1 组成的数之差
    因为有借位问题,相差为1是可以的
    即只有下面四种情况:

    0-0=0 1-0=1 0-1=w-1(向高位借一后) 1-1=0

    分为三大类:

    第一大类:相应位数之差为0 1的就很明了

    第二大类:相应位数之差为w-1的,借位后的那一位在后面给它加上 1 就好了

    第三大类:其余情况就是无解了

    代码:

    package _51_node.greedy;
    
    import java.util.Scanner;
    
    public class ex_1449 {
    
        /**
         * 1449 砝码称重
         * 1 秒  131,072 KB 40 分 4 级题
         * <p>
         * w进制算法,
         * 如果没有天平,只是这些砝码表示m的话,只需要将m表示成w进制数,然后要求每一位不是0就是1.(每个质量的砝码只有一个,要么放,要么不放)
         * <p>
         * 现在有这个天平,n这个数就是 两个 0 1 组成的数之差
         * 因为有借位问题,相差为1是可以的
         * 即只有下面四种情况:
         *
         * 0-0=0   1-0=1    0-1=w-1(向高位借一后)  1-1=0
         *
         * 分为三大类:
         *
         * 第一大类:相应位数之差为0  1的就很明了
         *
         * 第二大类:相应位数之差为w-1的,借位后的那一位在后面给它加上 1  就好了
         *
         * 第三大类:其余情况就是无解了
         *
         * @param args
         */
        public static void main(String[] args) {
            Scanner cin = new Scanner(System.in);
            int w = cin.nextInt();
            int n = cin.nextInt();
            boolean flag = true;
            while (n != 0) {
                if (n % w == 0 || n % w == 1) n /= w;
                else if ((n + 1) % w == 0) n = (n + 1) / w;
                else {
                    flag = false;
                    break;
                }
            }
            if (flag) System.out.println("YES");
            else System.out.println("NO");
        }
    }
    
    
  • 相关阅读:
    MVC中生成PDF并在web中显示
    Excel中如何避免删除未筛选得数据
    double数据类型四舍五入的bug
    Oracle 计算两个日期间时间排除非工作日及非工作时间精确至分钟
    数据库日志文件收缩
    Repeater 数据绑定 分页
    文件迁移 得到文件夹下所有文件名称
    共享业务稳定性测试&技术创新组
    产品测试组和业务测试组
    初级Bug率,随时受不了
  • 原文地址:https://www.cnblogs.com/somliy/p/10043786.html
Copyright © 2011-2022 走看看