ZOJ 3987 Numbers(枚举)
来源:互联网 发布:centos7编译安装mysql 编辑:程序博客网 时间:2024/05/17 00:59
没想到是枚举,还推了规律好久,应为对Java的不了解,所以没想到枚举,或者感觉枚举太麻烦会超时,首先最多枚举2的4000次方,4000重循环不会超时,每次2的k次方的计算也不会超时,因为pow复杂度是lg。所以,应该直接暴力,开始思路被带偏,或者说对Java的不了解,没做出来,所以直接枚举能放下的最小的就行了,如果2^k-1能放下,就不放2^k,对2^(k-1)进行判断,学了一波java大数,顺便当模板耍吧。
--------------------------------------因为热爱,所以坚持--------------------------------------------
import java.math.*;import java.util.*; public class Main { public static void main(String[] args) { Scanner cin=new Scanner(System.in); int t=cin.nextInt(),kkk; for(int i=1;i<=t;i++) { BigInteger n,m,sum,ans,ttt; n=cin.nextBigInteger(); m=cin.nextBigInteger(); ans=BigInteger.valueOf(0); sum=BigInteger.valueOf(0); int cnt=0; while(sum.compareTo(n)<0) { ttt=BigInteger.valueOf(2).pow(cnt).multiply(m); sum= sum.add(ttt); cnt++; } for(int j=cnt;j>=0;j--) { BigInteger tmp= BigInteger.valueOf(2).pow(j).subtract(BigInteger.ONE); tmp=tmp.multiply(m); if(tmp.compareTo(n)>=0)continue; tmp=BigInteger.valueOf(2).pow(j); ans=ans.add(tmp); //System.out.println(ans+" "+tmp); BigInteger kk=n.divide(tmp); kk=kk.min(m); tmp= tmp.multiply(kk); n=n.subtract(tmp); } System.out.println(ans); } } }
阅读全文
0 0
- ZOJ 3987 Numbers(枚举)
- ZOJ 3987 Numbers (贪心)
- ACDream 1417 - Numbers(枚举)
- (枚举)HDU 5522 Numbers
- USACO-Runaround Numbers(枚举)
- ZOJ 3987 && 2017CCPC秦皇岛 G:Numbers(高精度+贪心)
- 2017CCPC秦皇岛G ZOJ 3987Numbers(大数+贪心)
- ZOJ 3987 Numbers CCPC2017 Qinhuangdao(贪心+Java大整数)
- zoj 1403 Safecracker(枚举)
- ZOJ-2274(最大公约数 + 枚举)
- zoj 3862 Intersection(枚举)
- ZOJ 3710 Friends(枚举)
- ZOJ Problem Set - 1078(Palindrom Numbers)
- ZOJ 3487Ordinal Numbers(模拟)
- ZOJ 1129 Erdos Numbers(bfs)
- uva - Magic Numbers(枚举、位运算)
- UVA 471 Magic Numbers(枚举)
- URAL 2031. Overturned Numbers (枚举)
- 贪心算法 找钱问题
- UVa 1339 Ancient
- leetcode14. Longest Common Prefix
- numpy部分常用函数
- Matlab:从无到有——LeNet(1)
- ZOJ 3987 Numbers(枚举)
- PADS Router无法自动扇出
- java双引号中嵌入变量
- 自己写的自动化部署小工具 : Webhooks
- spring boot框架学习5-spring boot的web开发(1)
- 作业
- Android学习-通知的使用详解
- Mac OS上使用Electron
- 【常用函数封装】php-数字