Cod sursa(job #1573315)

Utilizator ArkinyStoica Alex Arkiny Data 19 ianuarie 2016 16:47:13
Problema Prefix Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include<fstream>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<vector>
using namespace std;

ifstream in("prefix.in");
ofstream out("prefix.out");
char s[1000010];
int prefix[1000010];
int main()
{

	int T;
	in >> T;
	while (T--)
	{
		in >> s;
		int mx = 0;
		int j = 0;
		for (int i = 1; s[i] != '\0'; ++i)
		{
			while (j > 0 && s[j] != s[i])
				j = prefix[j - 1];
			if (s[j] == s[i])
				++j;
			prefix[i] = j;
			if (prefix[i] * 2 == (i + 1))
				mx = max(mx, i + 1);
			else if (mx>0 && prefix[i] * 2 > (i + 1) && prefix[i]%mx==0)
				mx = max(mx, i + 1);
		}
		out << mx << '\n';
	}
	

	return 0;
}