记录编号 581570 评测结果 AAAAAAAAAA
题目名称 [NOIP 2003]麦森数 最终得分 100
用户昵称 Gravatar宇战 是否通过 通过
代码语言 C++ 运行时间 0.054 s
提交时间 2023-08-05 16:50:29 内存使用 2.88 MiB
显示代码纯文本
    #include<bits/stdc++.h>
    using namespace std;
    long long p,n,m;
    long long ans[2000],cc[2000];
    void mul(long long a[],long long b[],bool ff){
        long long c[2000];
        memset(c,0,sizeof(c));
        for(int i=1;i<=a[0];i++){
            for(int j=1;j<=b[0];j++){
                if(i+j-1>500)continue;
                c[i+j-1]+=a[i]*b[j];
                c[0]=i+j-1;
                
            }
        }
        for(int i=1;i<c[0];i++){
            c[i+1]+=c[i]/10;
            c[i]%=10;
        }
        if(c[c[0]]>=10){
            c[0]++; 
            c[c[0]]=c[c[0]-1]/10;
            c[c[0]-1]%=10;
        }
        if(ff){
           for(int i=0;i<=c[0];i++){
            ans[i]=c[i];
        } 
    }else{
        for(int i=0;i<=c[0];i++){
            cc[i]=c[i];
        } 
    }
        
        return;
    }
    int main(){
        freopen("mason.in","r",stdin);
        freopen("mason.out","w",stdout);
          
          scanf("%lld",&p);cout<<long(p*log10(2))+1<<endl;
          ans[0]=1;
          ans[1]=1;
          cc[0]=1;
          cc[1]=2;
    for(;p;p>>=1){
    if(p&1){
                mul(ans,cc,1);
        }
        mul(cc,cc,0);
    }
     
    int q=0;
    for(int i=500;i>1;i--){
        printf("%lld",ans[i]);
        q++;
        if(q==50){
            printf("\n");
            q=0;
        }
    }
    printf("%lld",ans[1]-1);
     
          return 0;     
    }