ZOJ 3987 Numbers(Java枚举)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3987
题意:
给出一个数n,现在要将它分为m个数,这m个数相加起来必须等于n,并且要使得这m个数的或值最小。
思路:
从二进制的角度分析,如果这m个数中有一个数某一位为1,那么最后或起来这一位肯定是为1的,所以如果某一位为1了,那么我们尽量就让其余位也等于1。
所以我们从最高位开始枚举,看看这一位是否需要为1,如果需要为1的话,那么剩下的几个数也尽量让这一位等于1。
1 import java.math.*; 2 import java.util.Scanner; 3 4 public class Main { 5 public static void main(String[] args) { 6 BigInteger n, m; 7 Scanner in = new Scanner(System.in); 8 int T = in.nextInt(); 9 for(int cas=0;cas<T;cas++){ 10 n = in.nextBigInteger(); 11 m = in.nextBigInteger(); 12 int len = 0; 13 BigInteger ss = n; 14 while(ss.compareTo(BigInteger.ZERO)>0){ 15 ss = ss.divide(BigInteger.valueOf(2)); 16 len++; 17 } 18 BigInteger tmp; 19 BigInteger ans = new BigInteger("0"); 20 for(int i = len; i>0; i--){ 21 if(n.compareTo(BigInteger.ZERO)<=0) break; 22 tmp = BigInteger.valueOf(2).pow(i-1).subtract(BigInteger.valueOf(1)); 23 BigInteger sum = tmp.multiply(m); 24 if(sum.compareTo(n)<0){ 25 BigInteger num = n.divide(BigInteger.valueOf(2).pow(i-1)); 26 if(num.compareTo(m)>0) num = m; 27 n = n.subtract(BigInteger.valueOf(2).pow(i-1).multiply(num)); 28 ans = ans.add(BigInteger.valueOf(2).pow(i-1)); 29 } 30 } 31 System.out.println(ans); 32 } 33 in.close(); 34 } 35 }
转载于:https://www.cnblogs.com/zyb993963526/p/7765437.html
ZOJ 3987 Numbers(Java枚举)相关推荐
- ZOJ 3987 Numbers 2017CCPC秦皇岛站G题 大整数 二进制 贪心
题目:https://cn.vjudge.net/problem/ZOJ-3987 题意:给出一个数n(不超过4000个十进制数字),将其分成m(不超过10的100次方)个数,要求这m个数的和等于n. ...
- java 枚举的继承_java中枚举类可以被继承吗?
java 枚举类 java中,使用关键字enum来定义枚举类,枚举类是一个特殊的类,大部分功能和普通类是一样的,区别为: ● 枚举类继承了java.lang.Enum类,而不是默认的Object类.而 ...
- Java枚举类使用方式
Java枚举类使用方式 单枚举定义 : /*** * @title: 单枚举定义* @author: wll* @since: 2021-1-27 14:47:54*/ public enum Jud ...
- 比起睡觉,我更喜欢刷巨详细的Java枚举类,这是来自猿人的自觉呀
零基础学习之Java枚举类 概述 JDK1.5之前 创建枚举类 代码示例 JDK1.5之后 创建枚举类 代码示例 枚举类继承父类 基本介绍 代码示例 枚举类实现接口 基本介绍 代码示例 枚举类实现单例 ...
- 你一定需要知道的高阶JAVA枚举特性!
JAVA枚举,比你想象中功能还要强大! 我经常发现自己在Java中使用枚举来表示某个对象的一组值. 在编译时确定类型可以具有什么值的能力是一种强大的能力,它为代码提供了结构和意义. 当我第一次了解枚举 ...
- Java枚举原来还能这么用
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 前言 相信不少java开发者写过状态变更的业务,比如订单流程.请假流程等等.一般会搞一个状态 ...
- java 注解 enum_13 Java枚举和注解
Java枚举 在某些情况下,一个类的对象是有限而且固定的.例如季节类,只能有 4 个对象. 当类的对象是有限时,就应该使用枚举,而不使用普通类.(枚举对象是单例模式) 枚举的属性 实现接口的枚举类 例 ...
- java 枚举(enum) 详细用法
用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法. p ...
- Java 枚举:实现接口
http://blog.csdn.net/veryitman/article/details/7945949 所有的枚举类都继承自 Enum,因为 Java 不支持多继承,所以枚举无法继承其它类. 但 ...
- java枚举使用详解
http://www.cnblogs.com/linjiqin/archive/2011/02/11/1951632.html java枚举使用详解 在实际编程中,往往存在着这样的"数据集& ...
最新文章
- EF映射之修改数据库
- show status用法
- python数据的格式输出_python
- 列表是不是python数据类型的是_在Python中,一个列表中的数据类型是否可以不相同?(回答可以or不可以)...
- 【SpringBoot】整合jdbc
- 前端代码 review 流程规范
- sam卡和sim卡区别_SAM卡概述
- python微博评论情感分析_用python对鹿晗、关晓彤微博进行情感分析
- python-字符串 修改间隔符 and定义变量 交换变量
- 25.Linux系统忘记登录密码解决办法(别着急,还能抢救一下)
- 致命错误:异常代码=C0000005(这篇最详细,收藏之~)
- 人不可貌象、小三不可斗量
- 硬盘卡住磁头的解决办法
- 51之hex程序烧到单片机
- 计算机无法唤醒,电脑休眠后无法唤醒怎么办 电脑休眠后无法唤醒原因及解决方法...
- 中台战略下的保险订单销售模式设计
- 【CSDN超实用的浏览器插件】——去广告、快捷搜索、自定义工具等诸多功能等你探索
- C++ int类型最大最小数字(16进制)
- java list高效去重_简述Java List去重五种方法
- 超实用的网页页脚设计小技巧