题目链接: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大数)相关推荐

  1. HDU-5050 java大数

    题意 给出一对长和宽 输出在这个长和宽之下 尽可能大的分出全部相等的小正方形的边长 输入输出都用二进制表示 输入最大是2^1000 分析 两个长度下都可以分出来就是gcd code import ja ...

  2. HPU组队赛B:问题(二进制枚举)

    时间限制1 Second 内存限制 512 Mb 题目描述 你有n个问题,你已经估计了第i个问题的难度为Ci,现在你想使用这些问题去构造一个问题集.比赛的问题集必须包含至少两个问题,而且比赛的总难度必 ...

  3. BZOJ1688|二进制枚举子集| 状态压缩DP

    Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...

  4. 116. 飞行员兄弟【二进制枚举】

    二进制枚举即可,需要注意的是,这道题和费解的开关还是有不同点的. 费解的开关枚举第一行就行了,因为它有依赖关系的. 而这个是一个十字形,无那种关系.故直接暴力枚举邓按不按的所有情况即可. #inclu ...

  5. 1362. 健康的荷斯坦奶牛【难度: 一般 / 二进制枚举】

    https://www.acwing.com/problem/content/1364/ 二进制枚举即可,取一个最小值. #include<bits/stdc++.h> using nam ...

  6. 容斥原理(二进制枚举)

    在计数时,必须注意无一重复,无一遗漏.为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计 ...

  7. # 起床困难综合症(二进制枚举+按位求贡献)

    起床困难综合症(二进制枚举+按位求贡献) 题意:n扇门,每扇门包括一个运算op和数x,玩家有一个初始攻击力[0,m],经过n扇门后的值为最终伤害值.给出n和m,求最大伤害值. code: #inclu ...

  8. Java大数一些个人的见解

    Java大数一些个人的见解 1.为什么要用Java大数? 在我们做题的过程中经常会遇到大数,虽然C/C++处理很快,当时写过的都知道大数不太好敲,不仅浪费时间,而且代码能力不强的人很容易出错.在没有模 ...

  9. [蓝桥杯][算法训练VIP]麦森数(Java大数+快速幂)

    题目描述 形如2p-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2p-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它有9 ...

  10. Java的学习与java大数运算

    之前就学过一点java,但太久没用知识点早就还给书本,之前在实验室搞到一本java的书,今天来重新温习一下 java的语法大部分和c++语言是一样的,入门非常快,所以在这里基础语句的用法就省略了 输出 ...

最新文章

  1. c语言程序设计自评报告,石家庄学院c语言程序设计自评报告.docx
  2. mysql gfs2_Mysql_HA+IP_SAN+Clvmd+GFS2
  3. python发明者叫什么-看看9种编程语言的发明者是怎么说的
  4. iOS开发之pch文件的正确使用
  5. 又一位纯手工打造CPU的牛人,并且汇编语言实现类Unix系统,支持文件系统
  6. 2017上海金马五校 购买装备 贪心+二分Check
  7. listview刷新_Flutter NestedScrollView 滑动折叠头部下拉刷新效果
  8. 轻松学DIV教程(div+css布局)
  9. oracle delphi唱盘,经典再升级 Oracle Delphi MK VI Gen 2
  10. 【火炉炼AI】机器学习040-NLP性别判断分类器
  11. 隐含社交信任度和基于情感的方法的推荐系统
  12. 2018网易内推 堆棋子 规律题
  13. datagrivew删除列_c# 如何获取datagrivew 表里面名称为card_id的一列,并把这列里面的元素循环...
  14. kindle看pdf不清楚_Kindle 对 PDF 的支持真的很糟糕吗?
  15. 推荐一款chrome浏览器插件:视频在线实时翻译
  16. java 电子签章 开源_java操作pdf制作电子签章 - CSDN博客
  17. Spring Boot学习8——Redis
  18. [翻译] TensorFlow 分布式之论文篇 “TensorFlow : Large-Scale Machine Learning on Heterogeneous Distributed Syst
  19. Samsung Bada程序介绍——BeijingPark
  20. 芯动科技面试——数字IC/FPGA面试案例总结1

热门文章

  1. android备份apk,无需手机助手,ABI帮你安装/备份安卓APK
  2. 选择性粘贴HTML,Excel中“选择性粘贴”的五种特殊用法
  3. 程序员该如何写好简历
  4. vue富文本使用详解
  5. 画图计算机应用基础,计算机应用基础教案:Windows XP附件——写字板、画图.doc...
  6. 信奥中的数学:卷积、傅立叶变换
  7. Python爬虫入门教程!手把手教会你爬取网页数据
  8. html flv jquery 插件,基于js与flash实现的网站flv视频播放插件代码
  9. java2实用教程第三版
  10. 解决vue报错:Avoided redundant navigation to current location