Pagini recente » Istoria paginii utilizator/florin011 | Istoria paginii utilizator/matericristea88 | Cod sursa (job #151506) | Clasament dupa rating | Cod sursa (job #73876)
Cod sursa(job #73876)
using namespace std;
#include <cstdio>
#include <cassert>
#include <string>
#include <sstream>
#include <algorithm>
#include <iostream>
#define FIN "prefix.in"
#define FOUT "prefix.out"
#define NMAX 1000001
#define CLEAR(X) memset ((X), 0, sizeof(X))
char a[NMAX];
int N, pi[NMAX];
void prefix ()
{
int k = 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;
}
}
void solve ()
{
CLEAR (pi);
prefix ();
int K;
for (K = N; K >= 1; -- K)
if (pi[K] > 0 && K % (K - pi[K]) == 0)
break;
printf ("%d\n", K);
}
void read ()
{
int T;
char c;
scanf ("%d\n", &T);
while (T--)
{
c = 'a';
N = 0;
while (c >= 'a' && c <= 'z')
scanf ("%c", &c),
a[++ N] = c;
solve ();
}
}
int
main ()
{
freopen (FIN, "rt", stdin);
freopen (FOUT, "wt", stdout);
read ();
return 0;
}