「代码比对」花
正经人的阳间代码:
if(n==3){printf("%lld\n",m);continue;}
g[3][1][1][1]=m;g[3][1][0][0]=m*(m-1)%mol;g[3][0][1][0]=m*(m-1)%mol;
g[3][0][0][0]=m*(m-1)%mol*(m-1)%mol;
for(int i=4;i<=n;i++){
g[i][0][0][0]=(m-1)*((g[i-1][0][0][0]+g[i-1][0][1][0])%mol)%mol;
g[i][1][0][0]=(g[i-1][0][1][0]+g[i-1][0][0][0])%mol;
g[i][0][1][0]=(m-1)*g[i-1][1][0][0]%mol;
g[i][1][1][1]=g[i-1][1][0][0];
g[i][0][0][1]=(m-1)*((g[i-1][0][0][1]+g[i-1][0][1][1]))%mol;
g[i][1][0][1]=(g[i-1][0][0][1]+g[i-1][0][1][1])%mol;
g[i][0][1][1]=(m-1)*((g[i-1][1][1][1]+g[i-1][1][0][1])%mol)%mol;
if(i==n)ans=((((ans+g[i][1][1][1])%mol+g[i][0][0][1]%mol)+g[i][1][0][1]%mol)+g[i][0][1][1])%mol;
}
不正经的阴间代码:
f[1][1][0] = s;
for (register int i = 2; i <= n; i++) {
f[i][1][0] = 1ll * (s - 1) * (1ll * f[i - 1][1][0] + f[i - 1][2][0]) % P;
f[i][1][1] = 1ll * (s - 1) * (1ll * f[i - 1][1][1] + f[i - 1][2][1] + f[i - 1][3][1]) % P;
f[i][2][0] = f[i - 1][1][0];
f[i][2][1] = f[i - 1][1][1];
f[i][3][1] = f[i - 1][2][0];
}
printf("%lld\n", (1ll * f[n][1][1] + f[n][2][1] + f[n][3][1]) % P);