bzoj2656

题目链接:传送门

题目大意:已知 a0=0;a1=1; n为偶数 an=a(n/2);n为基数 an=a(n/2)+a(n/2+1);

题目思路:因为n过大,所以要用java高精度,还有最多20组数据,所以记忆化搜索一下

import java.io.*;
import java.math.*;
import java.util.*;

public class Main {
    public static HashMap<BigInteger, BigInteger> M=new HashMap<BigInteger,BigInteger>();
    public static Scanner in=new Scanner(new BufferedInputStream(System.in));
    public static void main(String args[]){
        M.put(BigInteger.valueOf(0),BigInteger.valueOf(0));
        M.put(BigInteger.valueOf(1),BigInteger.valueOf(1));
        solve();
        in.close();
    }
    public static void solve(){
        int group=in.nextInt();
        while(group--!=0){
            BigInteger num1=in.nextBigInteger();
            BigInteger ans=dfs(num1);
            System.out.println(ans);
        }
    }
    public static BigInteger dfs(BigInteger a){
        if(M.containsKey(a)) return M.get(a);
        BigInteger ta=a;
        if(a.mod(BigInteger.valueOf(2)).compareTo(BigInteger.valueOf(1))==0){
            a=a.divide(BigInteger.valueOf(2));
            BigInteger temp1=dfs(a);
            a=a.add(BigInteger.valueOf(1));
            BigInteger temp2=dfs(a);
            temp1=temp1.add(temp2);
            M.put(ta,temp1);
            return temp1;
        }
        else{
            a=a.divide(BigInteger.valueOf(2));
            BigInteger tt=dfs(a);
            M.put(ta,tt);
            return tt;
        }
    }
}
时间: 2024-11-02 22:06:27

bzoj2656的相关文章

【BZOJ2656】[Zjoi2012]数列(sequence) 高精度

[BZOJ2656][Zjoi2012]数列(sequence) Description 小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式: 小白作为一个数学爱好者,很快就计算出了这个数列的通项公式.于是,小白告诉小蓝自己已经做出来了,但为了防止小蓝抄作业,小白并不想把公式公布出来.于是小白为了向小蓝证明自己的确做出来了此题以达到其炫耀的目的,想出了一个绝妙的方法:即让小蓝说一个正整数N,小白则说出 的值,如果当N很大时小白仍能很快的说出正确答案,这就说明小白的确得到了

【BZOJ2656】 [Zjoi2012]数列(sequence)

2656: [Zjoi2012]数列(sequence) Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 1485  Solved: 779[Submit][Status][Discuss] Description 小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式: 小白作为一个数学爱好者,很快就计算出了这个数列的通项公式.于是,小白告诉小蓝自己已经做出来了,但为了防止小蓝抄作业,小白并不想把公式公布出来.于是小白为了向小蓝

[转载]hzwer的bzoj题单

counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ1202 BZOJ1051 BZOJ1001 BZOJ1588 BZOJ1208 BZOJ1491 BZOJ1084 BZOJ1295 BZOJ3109 BZOJ1085 BZOJ1041 BZOJ1087 BZOJ3038 BZOJ1821 BZOJ1076 BZOJ2321 BZOJ1934 BZOJ