Pagini recente » Cod sursa (job #493526) | Cod sursa (job #2141150) | Cod sursa (job #890778) | Cod sursa (job #2555593) | Cod sursa (job #2060696)
#include <iostream>
#include <fstream>
#include <string.h>
#define NMAX 2000005
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int cnt, t;
int S[NMAX];
char sir[NMAX];
void kmp()
{
int m = strlen(sir + 1);
S[0] = -1;
S[1] = 0;
for (int i = 2; i <= m; i++)
{
int prv = i - 1;
char ch = sir[i];
while (S[prv] != -1 && sir[S[prv] + 1] != ch)
prv = S[prv];
S[i] = S[prv] + 1;
}
}
int main()
{
fin >> t;
while (t--)
{
fin >> (sir + 1);
int n = strlen(sir + 1);
int mx = 0;
kmp();
for (int i = 1; i <= n; i++)
if (S[i] != 0 && i % (i - S[i]) == 0)
mx = i;
fout << mx << "\n";
}
return 0;
}