Pagini recente » Cod sursa (job #1698025) | Cod sursa (job #450174) | Cod sursa (job #1091063) | Cod sursa (job #286622) | Cod sursa (job #1625042)
#include<fstream>
using namespace std;
const int N = 1000005;
char s[N];
int pred[N];
int calculPred ()
{
int i, k = 0, sol = 0;
pred[1] = 0;
for (i = 2; s[i]; i++)
{
while (k > 0 && s[i] != s[k + 1])
k = pred[k];
if (s[i] == s[k + 1])
k++;
pred[i] = k;
if (pred[i] != 0 && i % (i - pred[i]) == 0)
sol = i;
}
return sol;
}
int main ()
{
ifstream in ("prefix.in");
ofstream out ("prefix.out");
int n;
in>>n>>ws;
int i;
for (i = 1; i <= n; i++)
{
in.getline (s + 1, N);
out<<calculPred()<<"\n";
}
return 0;
}