2017CCPC秦皇岛 G题Numbers&&ZOJ3987【大数】
2017-11-02 11:11
127 查看
题意:
给出一个数n,现在要将它分为m个数,这m个数相加起来必须等于n,并且要使得这m个数的或值最小。
思路:
从二进制的角度分析,如果这m个数中有一个数某一位为1,那么最后或起来这一位肯定是为1的,所以如果某一位为1了,那么我们尽量就让其余位也等于1。所以我们从最高位开始枚举,看看这一位是否需要为1,如果需要为1的话,那么剩下的几个数也尽量让这一位等于1。
代码:
不懂啊,还是看别人的代码写的,觉得有用就拿去吧。(卧槽,第一次开我的IDEA写java还不错的嘛)
给出一个数n,现在要将它分为m个数,这m个数相加起来必须等于n,并且要使得这m个数的或值最小。
思路:
从二进制的角度分析,如果这m个数中有一个数某一位为1,那么最后或起来这一位肯定是为1的,所以如果某一位为1了,那么我们尽量就让其余位也等于1。所以我们从最高位开始枚举,看看这一位是否需要为1,如果需要为1的话,那么剩下的几个数也尽量让这一位等于1。
代码:
不懂啊,还是看别人的代码写的,觉得有用就拿去吧。(卧槽,第一次开我的IDEA写java还不错的嘛)
import java.math.*; import java.util.Scanner; public class Main { public static void main(String[] args) { BigInteger n, m; Scanner in = new Scanner(System.in); int T = in.nextInt(); for(int cas=0;cas<T;cas++){ n = in.nextBigInteger(); m = in.nextBigInteger(); int len = 0; BigInteger ss = n; while(ss.compareTo(BigInteger.ZERO)>0){ ss = ss.divide(BigInteger.valueOf(2)); len++; } BigInteger tmp; BigInteger ans = new BigInteger("0"); for(int i = len; i>0; i--){ if(n.compareTo(BigInteger.ZERO)<=0) break; tmp = BigInteger.valueOf(2).pow(i-1).subtract(BigInteger.valueOf(1)); BigInteger sum = tmp.multiply(m); if(sum.compareTo(n)<0){ BigInteger num = n.divide(BigInteger.valueOf(2).pow(i-1)); if(num.compareTo(m)>0) num = m; n = n.subtract(BigInteger.valueOf(2).pow(i-1).multiply(num)); ans = ans.add(BigInteger.valueOf(2).pow(i-1)); } } System.out.println(ans); } in.close(); } }
相关文章推荐
- ZOJ 3987 && 2017CCPC秦皇岛 G:Numbers(高精度+贪心)
- 2017CCPC秦皇岛G ZOJ 3987Numbers(大数+贪心)
- 2017 CCPC 秦皇岛 & ZOJ 3987 - Numbers (贪心+大数)
- 2017CCPC秦皇岛G ZOJ 3987Numbers(大数+贪心)
- zoj&2017CCPC秦皇岛站C-蛮力&erase细节&STL-Crusaders Quest
- ZOJ 3983 && 2017CCPC秦皇岛 C:Crusaders Quest
- ZOJ 3988 && 2017CCPC秦皇岛 H:Prime Set(二分匹配)
- 2017CCPC秦皇岛 H题Prime Set&&ZOJ3988
- 2017CCPC秦皇岛 L题One-Dimensional Maze&&ZOJ3992【模拟】
- ZOJ 3985 && 2017CCPC秦皇岛 E:String of CCPC
- ZOJ 3981 && 2017CCPC秦皇岛 A:Balloon Robot
- ZOJ 3988 && 2017CCPC秦皇岛 H:Prime Set(二分匹配)
- ZOJ-3987 Numbers 2017CCPC秦皇岛站G题 (二进制乱搞、贪心)
- ZOJ 3987 Numbers 2017CCPC秦皇岛站G题 大整数 二进制 贪心
- ZOJ 3992 && 2017CCPC秦皇岛 L:One-Dimensional Maze
- 2017CCPC秦皇岛 C题Crusaders Quest&&ZOJ3983【模拟+STL】
- ZOJ 3988 && 2017CCPC秦皇岛 H:Prime Set(二分匹配)
- 2017CCPC秦皇岛 E题String of CCPC&&ZOJ3985【模拟】
- ZOJ 3981 && 2017CCPC秦皇岛 A:Balloon Robot
- ZOJ 3993 && 2017CCPC秦皇岛 M:Safest Buildings