Pagini recente » Cod sursa (job #485379) | Cod sursa (job #3262610) | Cod sursa (job #2588518) | Cod sursa (job #347904) | Cod sursa (job #1203903)
#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]) 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;
}