FJOI正解!第一!!!

baim.  •  5个月前


include<bits/stdc++.h>

using namespace std;

define ll long long

define N 107

define M 13

const ll bit=1e9; struct nb {

ll a[M];
int l;
nb(){memset(a,0,sizeof(a)),l=0;}
ll &operator [](int x){return a[x];}
void operator =(int x){a[0]=x;}
void operator +=(int x)
{
    int i=0;
    a[0]+=x;
    while(a[i]>=bit)
    {
        a[i]-=bit;
        a[i+1]++;
        i++;
    }
    if(a[l+1])l++;
}
void operator *=(int x)
{
    int i=0;
    ll rest=0;
    for(i=0;i<=l;i++)
    {
        a[i]=a[i]*x+rest;
        rest=a[i]/bit;
        a[i]%=bit;
    }
    if(rest)a[++l]=rest;
}
void operator -=(nb b)
{
    int i=0;
    for(i=0;i<=b.l;i++)
    {
        a[i]-=b[i];
        if(a[i]<0)a[i]+=bit,a[i+1]--;
    }
    while(a[i]<0)a[i]+=bit,a[i+1]--,i++;
    while(l>0&&a[l]==0)l--;
}
void print()
{
    printf("%lld",a[l]);
    for(int i=l-1;i>=0;i--)
        printf("%09lld",a[i]);
}

}f[N]; int main() {

int i,n;
scanf("%d",&n);
f[1]=1,f[2]=5,f[3]=16;
for(i=4;i<=n;i++)
{
    f[i]=f[i-1];
    f[i]*=3;
    f[i]-=f[i-2];
    f[i]+=2;
}
f[n].print();
return 0;

}


评论: