Pagini recente » Cod sursa (job #2873774) | Cod sursa (job #3142191) | Cod sursa (job #1793806) | Cod sursa (job #959215) | Cod sursa (job #2432119)
#include <bits/stdc++.h>
#define nmax 1000005
using namespace std;
char a[nmax];
int n , pi[nmax];
int isPeriodic[nmax] ;
int maxi;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
void make_prefix()
{ int k = 0;
pi[1] = 0;
for(int i =2 ;i<=n;++i)
{
while(k>0 && a[k+1] != a[i])
k =pi[k];
if( a[k+1] == a[i] )
++k;
pi[i]=k;
}
}
int main()
{int t;
fin>>t;
while(t--)
{ maxi = 0;
fin >> a+1;
n = strlen(a+1);
make_prefix();
for(int i=1;i<=n;++i)
isPeriodic[i] =0;
///cout << n << "\n";
for(int i=1;i<=n;++i)
if( i%2 == 0 && pi[i] == i/2 )
{
isPeriodic[i] = pi[i];
maxi =i;
}
else if( isPeriodic[pi[i]] == i - pi[i] )
{ maxi = i;
isPeriodic[ i ] = isPeriodic[pi[i]];
}
fout << maxi;
fout <<'\n';
}
return 0;
}