某模拟赛 T2 题解
feecle6418 · · 个人记录
通过找规律,发现
据此计算即可。时间复杂度
核心代码:
int main(){
//已经省略无关部分
int n=0;
for(int i=1;i<=len;i++)n=(10ll*n+a[i]-'0')%mod;
for(int i=2;i<=k;i++)inv[i]=1ll*inv[mod%i]*(mod-mod/i)%mod;
int v0=(5ll*n-11+mod)%mod*i2%mod;
int v1=(5ll*n-29+mod)%mod*i4%mod;
v1=(mod-v1)%mod;
int v2=1ll*(mod-9)*i4%mod;
int v3=(1ll*n*n%mod-7ll*n%mod+mod+12)%mod*i4%mod;
int v4=(2ll*n%mod-7+mod)%mod*i2%mod;
int i45=4ll*Power(5,mod-2)%mod;
for(int i=3;i<=k;i++){
int c0=1ll*i45*inv[i-1]%mod*inv[i-2]%mod;
int c1=(v0+1ll*v1*i%mod+1ll*v2*i%mod*i)%mod;
int c2=(v3+1ll*v4*i%mod+1ll*i*i)%mod;
f[i]=(1ll*(mod-c1)*f[i-1]+1ll*(mod-c2)*f[i-2])%mod*c0%mod;
}
cout<<f[k];
}