hdu-5635 LCP Array
LCP Array
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 358 Accepted Submission(s): 102
Given the lcp array, Peter wants to know how many strings containing lowercase English letters only will satisfy the lcp array. The answer may be too large, just print it modulo 109+7.
The first line contains an integer n (2≤n≤10^5) -- the length of the string. The second line contains n−1 integers: a1,a2,...,an−1 (0≤ai≤n).
The sum of values of n in all test cases doesn't exceed 10^6.
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=1e5+5;
const long long mod=1e9+7;
int n,a[N];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<n;i++)
{
scanf("%d",&a[i]);
}
a[n]=0;
int flag=1;
for(int i=1;i<n;i++)
{
if(a[i])
{
if(a[i]-a[i+1]!=1)
{
flag=0;
break;
}
}
}
if(!flag)
{
cout<<"0"<<"\n";
}
else
{
int num=0;
for(int i=1;i<n;i++)
{
if(!a[i])
{
num++;
}
}
long long ans=26;
for(int i=0;i<num;i++)
{
ans=(ans*25)%mod;
}
cout<<ans%mod<<"\n";
}
}
return 0;
}