您的位置:首页 > 其它

HDU 5365 LCP Array (数学 逻辑 对我来说非常困难)

2016-03-05 22:16 211 查看
题目: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: