Pagini recente » Cod sursa (job #729931) | Cod sursa (job #1665145) | Cod sursa (job #226082) | Cod sursa (job #227300) | Cod sursa (job #2025098)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int aux[1000010],t;
char c[1000010];
void solve ()
{
int i,j,k;
int sol=0;
f.getline (c,1000010);
int n=strlen(c);
for (i=n;i>=1;i--) {c[i]=c[i-1];aux[i]=0;}
c[0]=' ';
j=0;
for (i=2;i<=n;i++)
{
while (j && c[i]!=c[j+1])
{
j=aux[j];
}
if (c[j+1]==c[i])
{
aux[i]=j+1;
j++;
}
k=i;
while (k && aux[k]*2!=k)
{
if (aux[k]*2<k) k=0;
k=aux[k];
}
if (k!=0) sol=i;
}
g<<sol<<"\n";
}
int main()
{
f>>t;
f.getline (c,20);
for (int k=1;k<=t;k++)
{
solve();
}
return 0;
}