Pagini recente » Cod sursa (job #1578664) | Cod sursa (job #291259) | Cod sursa (job #2864540) | Cod sursa (job #943983) | Cod sursa (job #893876)
Cod sursa(job #893876)
#include<fstream>
#include<cstring>
#define Nmax 1000010
using namespace std;
int n, i, p, pi[Nmax], t;
char a[Nmax], s[Nmax], d[5];
int main()
{
ifstream f("prefix.in");
ofstream h("prefix.out");
f >> t;
f.getline (d, 5);
for (int q = 1; q <= t; ++q)
{
f.getline (s, Nmax);
n = strlen(s);
for (i = 1; i <= n; ++i)
a[i] = s[i - 1];
p = 0;
memset (pi, 0, sizeof(pi));
for (i = 2; i <= n; ++i)
{
while (p > 0 && a[p + 1] != a[i])
p = pi[p];
if (a[p + 1] == a[i])
++p;
pi[i] = p;
}
while (n)
{
if (pi[n] && n % (n - pi[n]) == 0)
{
h << n << '\n';
break;
}
--n;
}
if (n == 0)
h << "0\n";
}
}