Pagini recente » Cod sursa (job #1459300) | Cod sursa (job #2509806) | Cod sursa (job #1504882) | Cod sursa (job #1421894) | Cod sursa (job #2430123)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
char pattern[1000010];
int helper[1000010];
int n;
short t;
void buildHelper()
{
for(int i = 1,j=0;i<=n;i++)
{
while(j && pattern[i] != pattern[j])
j = helper[j-1];
if(pattern[i]==pattern[j])
j++;
helper[i]=j;
}
}
void resetHelper()
{
for(int i = 0;i<=n;i++)
helper[i]=0;
}
void calcPrefix()
{
int res = 0;
for(int j=1;j<=n+1;j++)
if(j%(j-helper[j-1])==0 && helper[j-1])
res = j;
fout<<res<<'\n';
}
int main()
{
int k;
fin>>t;
for(int i = 1; i<=t; i++)
{
fin>>pattern;
for(k = 0; pattern[k]!='\0'; k++);
n = k-1;
buildHelper();
calcPrefix();
resetHelper();
}
fin.close();
fout.close();
return 0;
}