Pagini recente » Cod sursa (job #2798031) | Cod sursa (job #1111306) | Cod sursa (job #2255839) | Cod sursa (job #1952877) | Cod sursa (job #2202341)
#include <iostream>
#include <fstream>
#include <string.h>
#define Nmax 1000005
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int T;
int pre[Nmax];
void prefix(char a[],int n)
{ int maxim = 0;
int k = 0;
for(int i = 2 ; i <= n ; ++i )
{
while(k > 0 && a[k+1] != a[i])
k = pre[k];
if(a[k+1] == a[i])
++k;
pre[i] = k;
}
for(int i = n; i >= 1 ; --i)
if(pre[i] != 0 && i%(i-pre[i]) == 0)
maxim = i;
fout << maxim << "\n";
}
int main()
{
fin >> T;
char a[Nmax];
while(T--)
{
fin >> (a+1);
int n = strlen(a+1);
prefix(a,n);
}
return 0;
}