Cod sursa(job #1051794)

Utilizator ELHoriaHoria Cretescu ELHoria Data 10 decembrie 2013 16:37:06
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <fstream>
#include <cstring>

using namespace std;

int main()
{
	ifstream cin("prefix.in");
	ofstream cout("prefix.out");
	ios :: sync_with_stdio(false);
	int T;
	const int nmax = int(1e6) + 5;
	static char str[nmax];
	static int a[nmax];
	int n;
	int periodLength;
	for (cin >> T, cin.get();T;T--) {
		cin.getline(str,nmax);	
		int ans = 0;
		n = strlen(str);
		for (int i = 1, k = 0;i < n;i++) {
			while (k > 0 && str[i] != str[k]) k = a[k - 1];
			k += (str[i] == str[k]);
			a[i] = k;
		}
		for (int i = n - 1;i > 0;i--) {
			periodLength = i + 1 - a[i];
			if (periodLength != i + 1 && (i + 1 ) % periodLength == 0) {
				ans = i + 1;
				break;
			}
		}
		cout << ans << "\n";
	}
	return 0;
}