• bzoj 2656 [Zjoi2012]数列(sequence) 递推+高精度


    2656: [Zjoi2012]数列(sequence)

    Time Limit: 2 Sec  Memory Limit: 128 MB
    [Submit][Status][Discuss]

    Description

       小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式:

       小白作为一个数学爱好者,很快就计算出了这个数列的通项公式。于是,小白告诉小蓝自己已经做出来了,但为了防止小蓝抄作业,小白并不想把公式公布出来。于是小白为了向小蓝证明自己的确做出来了此题以达到其炫耀的目的,想出了一个绝妙的方法:即让小蓝说一个正整数N,小白则说出 的值,如果当N很大时小白仍能很快的说出正确答案,这就说明小白的确得到了公式。但这个方法有一个很大的漏洞:小蓝自己不会做,没法验证小白的答案是否正确。作为小蓝的好友,你能帮帮小蓝吗?

    Input

          输入文件第一行有且只有一个正整数T,表示测试数据的组数。

         第2~T+1行,每行一个非负整数N。

    Output

          输出文件共包含T行。

    第i行应包含一个不含多余前缀0的数,它的值应等于An(n为输入数据中第i+1行被读入的整数)

    【样例输入】

    Sample Input

    3

    1

    3

    10

    Sample Output

    1
    2
    3


    HINT

    T<=20,N<=10^100

    思路:每次记录(x,x+1)两个数的值;

       每次可以转化成(2x,2x+1)或者(2x+1,2x+2);

       复杂度logn;java写法;

    import java.util.*;
    import java.math.*;
    
    public class Main {
        public static void main(String[] args) {
            Scanner cin = new Scanner(System.in);
            int n;
            n=cin.nextInt();
            for(int i=0;i<n;i++)
            {
                BigInteger[] a=new BigInteger[10010];
                BigInteger x=cin.nextBigInteger();
                BigInteger two=new BigInteger("2");
                BigInteger one=new BigInteger("1");
                int flag=0;
                while(x.equals(one)==false)
                {
                    a[flag++]=x;
                    x=x.divide(two);
                }
                BigInteger index=one;
                BigInteger pre=one;
                BigInteger nex=one;
                for(int j=flag-1;j>=0;j--)
                {
                    if(a[j].equals(index.multiply(two)))
                    {
                        nex=pre.add(nex);
                    }
                    else 
                    {
                        pre=pre.add(nex);
                    }
                    index=a[j];
                }
                System.out.println(pre);
            }
        }
    }
  • 相关阅读:
    Swoole 学习笔记 03
    MySQL 索引概念
    MySQL使用存储过程创建百万级别测试数据
    MySQL 慢日志查询的设置
    Hyper中的 Request和Response
    PHPStorm deployment 工具的使用
    Hyperf 命令行
    Hyperf 事件机制
    Hyperf jsonrpc 服务的搭建
    PHPstorm的使用
  • 原文地址:https://www.cnblogs.com/jhz033/p/5928887.html
Copyright © 2020-2023  润新知