Pagini recente » Cod sursa (job #695090) | Cod sursa (job #316540) | Cod sursa (job #263624) | Cod sursa (job #1288119) | Cod sursa (job #3243995)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int t,i,n;
char c[1000005];
int kmp(char c[])
{
int n=strlen(c),i,j,pi[1000005],sol=0;
pi[0]=0;
for ( i = 1; i <n; i++)
{
j = pi[i-1];
while (j > 0 && c[i] != c[j])
j = pi[j-1];
if (c[i] == c[j])
j++;
pi[i] = j;
if((i+1)%(i+1-pi[i])==0&&(i+1)/(i+1-pi[i])>1)
sol=i+1;
}
return sol;
}
int main()
{
f>>t;
for(i=1;i<=t;i++)
{
f>>c;
g<<kmp(c)<<'\n';
}
return 0;
}