1 solutions

  • 0
    @ 2025-11-5 19:35:26

    C++ :

    #include<cstdio>
    using namespace std;
    struct arr{int n,p[1001];}g[1001],f[1001];
    int n,i;
    arr chen(arr a)
    {
      for (int i=1;i<=a.n;i++)
        a.p[i]*=2;
      for (int i=1;i<=a.n;i++)
        if (a.p[i]>9) {a.p[i+1]+=a.p[i]/10;a.p[i]%=10;}
      if (a.p[a.n+1]>0) a.n++;
      return a;
    }
    arr add(arr a,arr b)
    {
      a.n=a.n>b.n?a.n:b.n;
      for (int i=1;i<=a.n;i++)
        a.p[i]+=b.p[i];
      for (int i=1;i<=a.n;i++)
        if (a.p[i]>9) {a.p[i+1]+=a.p[i]/10;a.p[i]%=10;}
      if (a.p[a.n+1]>0) a.n++;
      return a;
    }
    arr Minus(arr a,arr b)
    {
      int i=1,j,k;  
      while (i<=b.n)  
      {  
        if (a.p[i]>=b.p[i])a.p[i]=a.p[i]-b.p[i];  
        else  
        {  
          j=i+1;  
          while (a.p[j]==0) j++;  
          a.p[j]--;  
          for (k=i+1;k<j;k++) a.p[k]=9;  
          a.p[i]=a.p[i]+10-b.p[i];  
        }  
        i++;  
      }  
      while (a.p[a.n]==0&&a.n>1)a.n--;  
      return a;  
    }  
    int main()
    {
      scanf("%d",&n);
      g[1].p[1]=2;g[2].p[1]=2;g[3].p[1]=8;
      g[1].n=g[2].n=g[3].n=1;
      f[1].p[1]=0;f[2].p[1]=2;f[3].p[1]=4;
      f[1].n=f[2].n=f[3].n=1;
      for (i=4;i<=n;i++)
      {
        g[i]=Minus(add(chen(f[i-1]),add(g[i-1],g[i-2])),g[i-3]);
        f[i]=add(f[i-1],g[i-1]);
      }
      for (i=f[n].n;i>0;i--)
        printf("%d",f[n].p[i]);
      printf("\n");
    }
    
    • 1

    Information

    ID
    19427
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By