Pagini recente » Cod sursa (job #1764637) | Cod sursa (job #2182295) | Cod sursa (job #397497) | Cod sursa (job #259021) | Cod sursa (job #930351)
Cod sursa(job #930351)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
#define maxN 1000010
int P[maxN], leng;
string S;
void Compute_prefix ()
{
memset (P, 0, sizeof (P));
P[0] = - 1;
P[1] = 0;
for (int i = 2; i <= leng; ++ i)
{
int x = i - 1;
while (x >= 1 && S[i - 1] != S[P[x]]) x = P[x];
P[i] = P[x] + 1;
}
}
int main()
{
ifstream f ("prefix.in");
ofstream g ("prefix.out");
int T;
f >> T;
for (int i = 1; i <= T; ++ i)
{
f >> S;
leng = S.length();
Compute_prefix();
bool ok = false;
for (int sol = leng; sol >= 1; -- sol)
{
if (! P[sol]) continue;
if (! (P[sol] % (sol - P[sol])))
{
g << sol << '\n';
ok = true;
break;
}
}
if (! ok) g << "0 \n";
}
return 0;
}