Pagini recente » Cod sursa (job #3172373) | Borderou de evaluare (job #1265718) | Cod sursa (job #1811592) | Cod sursa (job #2796322) | Cod sursa (job #170205)
Cod sursa(job #170205)
#include<fstream>
#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;
fin.getline(w,Max+1);
lw=strlen(w);
T[0]=-1;T[1]=sol=0;
while(i<=lw)
{
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;
}
fout<<sol<<'\n';
}
int main()
{
fin>>t;
fin.getline(w,Max);
while(t--)
solve();
return 0;
}