Pagini recente » Cod sursa (job #2416039) | Cod sursa (job #1659648) | Cod sursa (job #37550) | Cod sursa (job #1775013) | Cod sursa (job #170200)
Cod sursa(job #170200)
#include<fstream>
#include<iostream>
#include<cstring>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
#define Max 1000001
char w[Max];
int lw,T[Max],sol,t;
void solve()
{
int i=2,j=0,p,q,ok;
fin.getline(w,Max+1);
lw=strlen(w);
T[0]=-1;T[1]=sol=0;
while(i<=lw)
{
//cout<<i<<' '<<j<<'\n';
if(w[j]==w[i-1])
{
T[i]=j+1;
if(2*T[i]>=i)
if(2*T[i]==i) sol=i;
else
{
p=0,q=T[i];
while(q<i)
{
if(w[p]!=w[q]) break;
p++,q++;
}
if(q==i) sol=i;
}
i++,j++;
}
else
if(j>0) j=T[j];
else T[i++]=0;
}
/*cout<<w<<'\n';
for(i=0;i<=lw;i++)
cout<<T[i]<<' ';
cout<<"\n"<<sol<<"\n";*/
fout<<sol<<'\n';
}
int main()
{
fin>>t;
fin.getline(w,Max);
while(t--)
solve();
return 0;
}