核心代码:
for(int i=1;i<=26;i++)dp[0][i]=i;dp[0][0]=26;
long long s=26,s1;
for(int i=1;i<n;i++){
s1=0;
for(int j=1;j<=26-i;j++)
dp[i][j]=s1+=s-dp[i-1][j];
dp[i][0]=s=s1;
}
// for(int i=0;i<n;i++){for(int j=0;j<27-i;j++)printf("%d ",dp[i][j]);printf("\n");}
long long ans=0;
for(int i=0;i<n-1;i++)ans+=dp[i][0];
if(q[0]>0)ans+=dp[n-1][q[0]];
for(int i=1;i<n;i++){
int v=q[i]-q[i-1]-1;
if(v>0)ans+=dp[n-1-i][v];
}
ans++;
printf("%d\n",(int)ans);
for(int i=1;i<=26;i++)dp[0][i]=i;dp[0][0]=26;
long long s=26,s1;
for(int i=1;i<n;i++){
s1=0;
for(int j=1;j<=26-i;j++)
dp[i][j]=s1+=s-dp[i-1][j];
dp[i][0]=s=s1;
}
// for(int i=0;i<n;i++){for(int j=0;j<27-i;j++)printf("%d ",dp[i][j]);printf("\n");}
long long ans=0;
for(int i=0;i<n-1;i++)ans+=dp[i][0];
if(q[0]>0)ans+=dp[n-1][q[0]];
for(int i=1;i<n;i++){
int v=q[i]-q[i-1]-1;
if(v>0)ans+=dp[n-1-i][v];
}
ans++;
printf("%d\n",(int)ans);