Pagini recente » Cod sursa (job #1078395) | Cod sursa (job #546642) | Cod sursa (job #2306284) | Cod sursa (job #2507821) | Cod sursa (job #1203910)
#include <fstream>
#include <cstring>
#include <iostream>
using namespace std;
int t,z[1000005];
char s[1000005];
int main()
{
ifstream in ("prefix.in");
ofstream out ("prefix.out");
in>>t;
for (;t>0;--t)
{
in>>s;
int n=strlen(s),st=0,dr=0,maxim=0;
for (int i=1;i<n;++i)
{
if (i<=dr)
{
z[i]=dr-i+1;
if (z[i]>z[i-st]) z[i]=z[i-st];
}
while (i+z[i]<n && s[z[i]]==s[i+z[i]]) ++z[i];
if (dr<i+z[i]-1) dr=i+z[i]-1,st=i;
if (z[i]>z[maxim] && z[i]>=i) maxim=i;
}
int j=maxim;
if (maxim>0) while (z[j]>=maxim) j=j+maxim;
out<<j<<"\n";
for (int i=0;i<n;++i) z[i]=0;
}
in.close();
out.close();
return 0;
}