Pagini recente » Cod sursa (job #1888481) | Cod sursa (job #654428) | Borderou de evaluare (job #103660) | Cod sursa (job #1140596) | Cod sursa (job #1888755)
#include <cstring>
#include <fstream>
using namespace std;
int n, pref[1000005], maxp;
char x[1000005];
int main()
{
ifstream fin("prefix.in");
ofstream fout("prefix.out");
fin >> n;
fin.getline(x, 1000005);
while (n--)
{
memset(pref, 0, sizeof(pref));
maxp = 0;
fin.getline(x, 1000005);
int size = strlen(x);
int q = 0;
for (int i = 1; i < size; ++i)
{
while (q != 0 && x[q] != x[i])
q = pref[q - 1];
if (x[q] == x[i]) ++q;
pref[i] = q;
if (pref[i] != 0 && (i + 1) % ((i + 1) - pref[i]) == 0)
maxp = i + 1;
}
fout << maxp << '\n';
}
fin.close();
fout.close();
}