ZOJ 3987 秦皇岛现场赛G题 java
来源:互联网 发布:雷风影视cms破解版 编辑:程序博客网 时间:2024/05/06 02:03
题目连接:ZOJ 3987
原网页含有mathtype公式,复制过来会乱,所以这里就不放题了。
题意:给2个大数n和m,要求把n分成m个数相加,并且取或运算后最小。
题目分析:
首先考虑将n平分m份,如果恰好可以平分即n%m==0,则答案就是n/m。
之后考虑无法平分的情况,n/m+1会产生二进制的进位,如n=15,m=4的情况,n/m=3,n/m+1=4,产生了进位。考虑n/m+1用二进制表示,取其lowbit,比如n=32,m=6,
则n/m+1=6=110,其lowbit就是把最右边的1变为0,lowbit(6)=4;此时这m个数是一定会加上4的,剩下的再重复上述步骤,知道剩下的数小于m。如果n/m+1是2的次方数,lowbit数不变,此时这个数也是一定要取的,不过只能尽量多的取,如上述n=15,m=4的情况,前三个每个取4,后一个不取。
最后考虑n=32,m=6的情况:第一步n/m+1=6,取4,剩余32-6*4=8,8/6+1=2,则前3个数+2,后面3个数不变,剩下0,结束。
lowbit就是x&(-x)。
由于这里需要大数取模,相减,以及与运算,所以在没有详尽的大数模板情况下java是个不错的选择。
import java.io.*;import java.util.*;import java.math.*;public class Main {public static void main(String[] args){int T;BigInteger m,n,div,left,l;BigInteger []t=new BigInteger[1111];Scanner cin=new Scanner(System.in);T=cin.nextInt();for(int kase=0;kase<T;kase++){n=cin.nextBigInteger();m=cin.nextBigInteger();div=n.divide(m);if(n.equals(m.multiply(div))){System.out.println(div);continue;}BigInteger ans=BigInteger.valueOf(0);left=n;div=div.add(BigInteger.valueOf(1));while(left.compareTo(BigInteger.ZERO)==1){BigInteger bit=lowbit(div);if(bit.equals(div)){ans=ans.add(div);BigInteger buf=left.divide(div);buf=buf.multiply(div);left=left.subtract(buf);div=left.divide(m);div=div.add(BigInteger.valueOf(1));}else{BigInteger buf=div.subtract(bit);ans=ans.add(buf);buf=buf.multiply(m);left=left.subtract(buf);div=left.divide(m);div=div.add(BigInteger.valueOf(1));}}System.out.println(ans);}}private static BigInteger lowbit(BigInteger div) {return div.and(div.multiply(BigInteger.valueOf(-1)));}}
阅读全文
0 0
- ZOJ 3987 秦皇岛现场赛G题 java
- ZOJ-3987 Numbers 2017CCPC秦皇岛站G题 (二进制乱搞、贪心)
- ZOJ-3987 Numbers 2017CCPC秦皇岛站G题 (二进制、贪心)
- ZOJ 3987 Numbers 2017CCPC秦皇岛站G题 大整数 二进制 贪心
- ZOJ 3987 && 2017CCPC秦皇岛 G:Numbers(高精度+贪心)
- 2017CCPC秦皇岛G ZOJ 3987Numbers(大数+贪心)
- 2017CCPC秦皇岛现场赛
- 2017 CCPC 秦皇岛 & ZOJ 3987
- ZOJ 3732 2013 ACM/ICPC 长沙赛区现场赛G题 Graph Reconstruction (图论)
- 2017 CCPC 秦皇岛 G题
- 2017 CCPC 秦皇岛 G题
- zoj 3827(牡丹江现场赛I题)
- 2017CCPC 秦皇岛现场赛 M-String of CCPC
- 大连赛区现场赛D题 ZOJ 3542 Hexadecimal View
- ZOJ 3542 2011大连现场赛D题(简单模拟)
- zoj 3733 Skycity 长沙现场赛H题
- ZOJ 3829 (2014 牡丹江现场赛 K 题)
- zoj 3820(2014牡丹江现场赛B题)
- 习题4(3)
- 最大表示法与最小表示法
- Verilog学习笔记基本语法篇(十一)········ 常用系统函数
- ROS 1 和 ROS 2 的前世、今生、安装使用说明与资料汇总
- 2017CNCC会议总结(一)
- ZOJ 3987 秦皇岛现场赛G题 java
- 电商运营专员应具备那些能力
- CentOS 6.5 手动rpm包安装gcc、g++
- 对象的强、软、弱和虚引用的概念、应用及其在UML中的表示(GC维度)
- 判断一个数是否为素数
- CNN结构和性质
- C语言提高-39讲: 动态存储管理与动态数组的实现(实践)
- 【机器学习】Softmax推导
- Verilog学习笔记基本语法篇(十二)········ 编译预处理