hdu4577(大数+分析)

来源:互联网 发布:侠客风云传 招式数据 编辑:程序博客网 时间:2024/06/05 23:56
题意:
1,2,4,8,16........1*(2^k) 
3,6,12,24..........3*(2^k)
5,10,20,40.........5*(2^k)
2*x-1,............(2*x-1)(2^k)

解题思路:球是按照上面的序列放的(贪心思想),但是由于m<=25,所以对于每组序列只要求的k的大小,然后除以m,相加就是答案。对于每一组序列的划分如下:[2^0,2^(m-1)]、[2^m, 2^(2*m-1)]、最后解(2*x)*(2^(k*m-1)) <= n即可,枚举k这样就不会超时。

代码如下:

import java.util.*;import java.io.*;import java.math.*;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner cin = new Scanner(System.in);int t = cin.nextInt();while(t-- > 0){BigInteger n = cin.nextBigInteger();n = n.multiply(BigInteger.valueOf(2));int k = cin.nextInt();BigInteger m = BigInteger.valueOf(2).pow(k);BigInteger ans = BigInteger.ZERO;while(1 > 0){        n = n.divide(m);if(n.compareTo(BigInteger.ZERO) == 0)break;ans = ans.add( n.add(BigInteger.ONE).divide(BigInteger.valueOf(2)) );}System.out.println(ans);}}}


0 0
原创粉丝点击