Pagini recente » Cod sursa (job #2448527) | Cod sursa (job #570020) | Cod sursa (job #2045060) | Cod sursa (job #16184) | Cod sursa (job #1164406)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int NMax = 1000010;
int N;
char A[NMax];
int pi[NMax];
int ans;
void Make_Pi()
{
ans = 0;
int k = 0;
pi[1] = 0;
N = 1;
for (int i = 2; A[i] != 0; ++ i)
{
++N;
while ( k > 0 && A[k + 1] != A[i])
k = pi[k];
if (A[k + 1] == A[i])
++ k;
pi[i] = k;
}
}
int main()
{
FILE *f = fopen("prefix.in", "r");
FILE *g = fopen("prefix.out", "w");
int nr_tests;
fscanf (f, "%d", &nr_tests);
while (nr_tests -- )
{
fscanf(f, "%s", A + 1);
Make_Pi();
ans = 0;
for (int i = N; i > 1; -- i)
if (pi[i] != 0 && i % (i - pi[i]) == 0)
{
ans = i;
break;
}
fprintf(g, "%d\n", ans);
}
fclose(f);
fclose(g);
return 0;
}