Cod sursa(job #2751270)

Utilizator Madalin_IonutFocsa Ionut-Madalin Madalin_Ionut Data 14 mai 2021 17:45:01
Problema Prefix Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#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";
	}
}