Pagini recente » Cod sursa (job #780513) | Cod sursa (job #779999) | Cod sursa (job #1576270) | Ciorna | Cod sursa (job #1786478)
#include <iostream>
#include<fstream>
#include<string>
using namespace std;
const int nmax=1000005;
string s;
int t,per[nmax],pi[nmax],i,k,mx;
int main()
{
ifstream f("prefix.in");
ofstream g("prefix.out");
f>>t;
for(int cnt=1;cnt<=t;cnt++)
{
f>>s;pi[0]=-1;mx=0;k=-1;
for(i=0;i<s.size();i++)
per[i]=0;
for(i=1;i<s.size();i++)
{
while(k!=-1&&s[k+1]!=s[i])
k=pi[k];
if(s[k+1]==s[i]) k++;
pi[i]=k;
if(pi[i]!=-1)
{
if(2*pi[i]+2==i+1)
{
per[i]=pi[i]+1;
}
else
{
if(per[pi[i]]!=0&&pi[i]+1>(i+1)/2)
{
if((i+1)%(per[pi[i]])==0)
per[i]=per[pi[i]];
}
}
}
if(per[i]!=0) mx=i+1;
}
g<<mx<<'\n';
}
return 0;
}