ZOJ3987(二进制枚举+java大数)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3987
题意:给一个数n和一个数m,让你将n这个数分成m个数相加,且这m个数的or值最小。
思路:直接从二进制角度考虑,要使得m个数的or值最小,也就是说m个数中最高位应该尽量低,我们先假设存在一个k使得
(2^k-1)*m > n > (2^(k-1)-1)*m,那么可以知道m个二进制数中至少有一个数的最高位为k。因为现在我们做或运算,所以此时应让尽量多的数的第k位为1,那么答案ans += 2^k,从高位向低位递推,直到n变为0即可。
代码:
import java.util.*;
import java.math.*;
public class Main{public static void main(String[] args){Scanner cin=new Scanner(System.in);int T=cin.nextInt();while(T-->0){BigInteger n=cin.nextBigInteger();BigInteger m=cin.nextBigInteger();BigInteger ans=BigInteger.valueOf(0);BigInteger nn=n;int len=0;while(nn.compareTo(BigInteger.ZERO)>0){nn=nn.divide(BigInteger.valueOf(2));len++;}for(int i=len-1;i>=0;i--){BigInteger num1=BigInteger.valueOf(2).pow(i).subtract(BigInteger.ONE);BigInteger num2=num1.multiply(m);while(num2.compareTo(n)<0){BigInteger num3=n.divide(BigInteger.valueOf(2).pow(i));if(num3.compareTo(m)>0) num3=m;n=n.subtract(BigInteger.valueOf(2).pow(i).multiply(num3));ans=ans.add(BigInteger.valueOf(2).pow(i));}}System.out.println(ans);}}
}
ZOJ3987(二进制枚举+java大数)相关推荐
- HDU-5050 java大数
题意 给出一对长和宽 输出在这个长和宽之下 尽可能大的分出全部相等的小正方形的边长 输入输出都用二进制表示 输入最大是2^1000 分析 两个长度下都可以分出来就是gcd code import ja ...
- HPU组队赛B:问题(二进制枚举)
时间限制1 Second 内存限制 512 Mb 题目描述 你有n个问题,你已经估计了第i个问题的难度为Ci,现在你想使用这些问题去构造一个问题集.比赛的问题集必须包含至少两个问题,而且比赛的总难度必 ...
- BZOJ1688|二进制枚举子集| 状态压缩DP
Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...
- 116. 飞行员兄弟【二进制枚举】
二进制枚举即可,需要注意的是,这道题和费解的开关还是有不同点的. 费解的开关枚举第一行就行了,因为它有依赖关系的. 而这个是一个十字形,无那种关系.故直接暴力枚举邓按不按的所有情况即可. #inclu ...
- 1362. 健康的荷斯坦奶牛【难度: 一般 / 二进制枚举】
https://www.acwing.com/problem/content/1364/ 二进制枚举即可,取一个最小值. #include<bits/stdc++.h> using nam ...
- 容斥原理(二进制枚举)
在计数时,必须注意无一重复,无一遗漏.为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计 ...
- # 起床困难综合症(二进制枚举+按位求贡献)
起床困难综合症(二进制枚举+按位求贡献) 题意:n扇门,每扇门包括一个运算op和数x,玩家有一个初始攻击力[0,m],经过n扇门后的值为最终伤害值.给出n和m,求最大伤害值. code: #inclu ...
- Java大数一些个人的见解
Java大数一些个人的见解 1.为什么要用Java大数? 在我们做题的过程中经常会遇到大数,虽然C/C++处理很快,当时写过的都知道大数不太好敲,不仅浪费时间,而且代码能力不强的人很容易出错.在没有模 ...
- [蓝桥杯][算法训练VIP]麦森数(Java大数+快速幂)
题目描述 形如2p-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2p-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它有9 ...
- Java的学习与java大数运算
之前就学过一点java,但太久没用知识点早就还给书本,之前在实验室搞到一本java的书,今天来重新温习一下 java的语法大部分和c++语言是一样的,入门非常快,所以在这里基础语句的用法就省略了 输出 ...
最新文章
- c语言程序设计自评报告,石家庄学院c语言程序设计自评报告.docx
- mysql gfs2_Mysql_HA+IP_SAN+Clvmd+GFS2
- python发明者叫什么-看看9种编程语言的发明者是怎么说的
- iOS开发之pch文件的正确使用
- 又一位纯手工打造CPU的牛人,并且汇编语言实现类Unix系统,支持文件系统
- 2017上海金马五校 购买装备 贪心+二分Check
- listview刷新_Flutter NestedScrollView 滑动折叠头部下拉刷新效果
- 轻松学DIV教程(div+css布局)
- oracle delphi唱盘,经典再升级 Oracle Delphi MK VI Gen 2
- 【火炉炼AI】机器学习040-NLP性别判断分类器
- 隐含社交信任度和基于情感的方法的推荐系统
- 2018网易内推 堆棋子 规律题
- datagrivew删除列_c# 如何获取datagrivew 表里面名称为card_id的一列,并把这列里面的元素循环...
- kindle看pdf不清楚_Kindle 对 PDF 的支持真的很糟糕吗?
- 推荐一款chrome浏览器插件:视频在线实时翻译
- java 电子签章 开源_java操作pdf制作电子签章 - CSDN博客
- Spring Boot学习8——Redis
- [翻译] TensorFlow 分布式之论文篇 “TensorFlow : Large-Scale Machine Learning on Heterogeneous Distributed Syst
- Samsung Bada程序介绍——BeijingPark
- 芯动科技面试——数字IC/FPGA面试案例总结1
热门文章
- android备份apk,无需手机助手,ABI帮你安装/备份安卓APK
- 选择性粘贴HTML,Excel中“选择性粘贴”的五种特殊用法
- 程序员该如何写好简历
- vue富文本使用详解
- 画图计算机应用基础,计算机应用基础教案:Windows XP附件——写字板、画图.doc...
- 信奥中的数学:卷积、傅立叶变换
- Python爬虫入门教程!手把手教会你爬取网页数据
- html flv jquery 插件,基于js与flash实现的网站flv视频播放插件代码
- java2实用教程第三版
- 解决vue报错:Avoided redundant navigation to current location