Pagini recente » Cod sursa (job #1842848) | Cod sursa (job #349232) | Cod sursa (job #2051031) | Cod sursa (job #1145431) | Cod sursa (job #2751270)
#include <bits/stdc++.h>
#define P 34512773
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int n, len;
char s[1000003];
int ha[1000003];
int p26[1000003];
void FormareHash()
{
for (len = 1; s[len] != 0; len++)
{
ha[len] = (ha[len - 1] * 26 + s[len] - 'a') % P;
p26[len] = p26[len - 1] * 26 % P;
}
len--;
}
int Verif(int prefix_len)
{
int cod1 = ha[prefix_len], cod2, i;
bool periodic = true;
for (i = 2; periodic == true && prefix_len * i <= len; i++)
{
cod2 = (ha[prefix_len * i] - 1LL * ha[prefix_len * (i - 1)] * p26[prefix_len] % P + P) % P;
if (cod1 != cod2) periodic = false;
}
if (i == 3 && periodic == false) prefix_len = 0;
if (periodic == false) i--;
return prefix_len * (i - 1);
}
int main()
{
int i, j, len_max = 0;
fin >> n;
p26[0] = 1;
for (i = 1; i <= n; i++)
{
fin >> (s + 1);
FormareHash();
len_max = 0;
for (j = 1; j <= len / 2; j++)
len_max = max(len_max, Verif(j));
fout << len_max << "\n";
}
}