Cod sursa(job #2472406)

Utilizator vladbatalanBatalan Vlad vladbatalan Data 12 octombrie 2019 12:29:40
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <string>
#define MAXR 1000010

using namespace std;

ifstream fin("prefix.in");
ofstream fout("prefix.out");

int prefix[MAXR];
string s;
int t, sol;

void makePrefix()
{
	s = "#" + s;
	sol = 0;
	int q = 0;
	int sz = s.size();
	prefix[1] = 0;
	for (int i = 2; i < sz; i++)
	{
		while (q && s[i] != s[q + 1])
			q = prefix[q];
		if (s[q + 1] == s[i])
			q++;
		prefix[i] = q;
		if (prefix[i] != 0)
			if (i % (i - prefix[i]) == 0)
				sol = i;
	}
}

void showPrefix()
{
	for (int i = 1; i < s.size(); i++)
		fout << s[i] << ' ';
	fout << '\n';
	for (int i = 1; i < s.size(); i++)
		fout << prefix[i] << ' ';
	fout << '\n';
}

int main()
{
	fin >> t;
	while (t--)
	{
		fin >> s;
		makePrefix();
		fout << sol << '\n';
	}
	return 0;
}