Cod sursa(job #1724941)

Utilizator Cristian1997Vintur Cristian Cristian1997 Data 4 iulie 2016 16:44:51
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.61 kb
using namespace std;
#include <fstream>
#define Lmax 1000011

int p[Lmax];
char s[Lmax + 1];

int main()
{
	int t, i, k;
	ifstream fin("prefix.in");
	ofstream fout("prefix.out");

	ios_base::sync_with_stdio(false);

	for (fin >> t, fin.get(); t; --t)
	{
		fin.getline(s + 1, Lmax);

		for (k = 0, i = 2; s[i]; ++i)
		{
			while (k > 0 && s[k + 1] != s[i]) k = p[k];
			if (s[k + 1] == s[i]) ++k;

			p[i] = k;
		}

		for (--i; i >= 0; --i)
			if ((p[i] && p[i] % (i - p[i]) == 0) || i == 0)
			{
				fout << i << '\n';
				break;
			}
	}

	fin.close();
	fout.close();

	return 0;
}