Cod sursa(job #1722745)

Utilizator Cristian1997Vintur Cristian Cristian1997 Data 28 iunie 2016 19:19:25
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
using namespace std;
#include <fstream>
#include <vector>
#include <algorithm>
#include <string>
using ll = long long;
using uint = unsigned int;
using ull = unsigned long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
#define Lmax 1000001

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

int solve();

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

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

		fout << solve() << '\n';
	}

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

    return 0;
}

int solve()
{
	int i, k, res;

	for (res = 0, 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;

		if (k && k % (i - k) == 0) res = i;
	}

	return res;
}