题目:http://acm.hdu.edu.cn/showproblem.php?pid=5635
代码:
#include<iostream>
#include<cstdio>
using namespace std;
const long long M=1e9+7;
int num[100005];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
num[n-1]=0;
for(int i=0;i<n-1;i++)
{
scanf("%d",num+i);
}
long long ans=26;
for(int i=0;i<n-1;i++)
{
if(!num[i])
{
ans=(ans*25)%M;
}
else if(num[i]!=num[i+1]+1)
{
ans=0;
break;
}
}
cout<<ans<<endl;
}
return 0;
}
分析:
经过题解的分析,思路立马就透彻了,一直以为是C(n,26),但是求的是最长相同前缀,与就是说第一个可以和第三个字母相同,即26*25^m,m是0的个数。
4
1 2 3
0
2 2 2
0
3 2 1 26
4
2 1 0 26*25^1
4
1 0 0 26*25^2
4
0 3 2 26*25^1
4
0 0 3 26*25^2
4
0 0 2 26*25^2
4
0 0 1 26*25^2
4
0 0 0 26*25^3