zoukankan      html  css  js  c++  java
  • bzoj2656 数列

    Description

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

    A[0]=0

    A[1]=1

    A[2n]=A[n]

    A[2n+1]=A[n]+A[n+1]

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

    Input

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

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

    Output

          输出文件共包含T行。

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

    按公式逐层展开至k*A[1]的形式

    k1*A[2i]+k2*A[2i+1]=(k1+k2)*A[i]+k2*A[i+1]

    展开过程中始终只有最多两项

    #include<cstdio>
    #include<cstring>
    #define N 105
    char s[256];
    int a[N];
    int t0[N],t1[N];
    int main(){
        int t,l;
        scanf("%d",&t);
        while(t--){
            scanf("%s",s);
            l=strlen(s)-1;
            for(int i=0;i<=l;i++)a[l-i]=s[i]-'0';
            if(l==0&&a[0]==0){
                puts("0");
                continue;
            }
            memset(t0,0,sizeof(t0));
            memset(t1,0,sizeof(t1));
            t0[0]=1;
            while(l||a[0]){
                for(int i=l;i>0;i--){
                    if(a[i]&1)a[i-1]+=10;
                    a[i]>>=1;
                }
                if(a[0]&1){
                    for(int i=0;i<N;i++)t1[i]+=t0[i];
                    for(int i=1;i<N;i++)t1[i]+=t1[i-1]/10,t1[i-1]%=10;
                }else{
                    for(int i=0;i<N;i++)t0[i]+=t1[i];
                    for(int i=1;i<N;i++)t0[i]+=t0[i-1]/10,t0[i-1]%=10;
                }
                a[0]>>=1;
                while(l&&!a[l])l--;
            }
            for(int i=N-1,d=0;i>=0;i--){
                d|=t1[i];
                if(d)putchar(t1[i]+'0');
            }
            putchar(10);
        }
        return 0;
    }
  • 相关阅读:
    使用Vim写LaTeX代码(Vim+Vimtex+Skim)
    如何安装vim自动补全插件YouCompleteMe(YCM)
    我的vimrc配置
    囚徒问题(100 prisoners problem)的python验证
    tomcat下运行多个项目
    转使用chrome命令行:disable-web-security 实现浏览器跨域
    Spring Session
    nodejs 之 nvm和pm2
    chrome地址栏命令
    Koa2和相关资料
  • 原文地址:https://www.cnblogs.com/ccz181078/p/5173386.html
Copyright © 2011-2022 走看看