Cod sursa(job #1227249)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 9 septembrie 2014 18:56:19
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
#include <cstring>
#define DIM 1000005

using namespace std;

//ifstream f("prefix.in");
//ofstream g("prefix.out");

char S[DIM];

int Pi[DIM];

int T;

int main() {
	
	freopen("prefix.in", "r", stdin);
	freopen("prefix.out", "w", stdout);

	//f >> T;
	scanf("%d", &T);
	//f.get();
	gets(S + 1);
	while (T--) {
		//f >> S + 1;
		gets(S + 1);
		Pi[1] = 0;
		for (int i = 2; S[i] != 0; ++i) {
			int q = Pi[i - 1];
			while (q && S[i] != S[q + 1])
				q = Pi[q];
			if (S[i] == S[q + 1])
				Pi[i] = q + 1;
			else
				Pi[i] = 0;
		}
		int sol = 0;
		for (int i = strlen(S + 1); i >= 1; --i)
		if (Pi[i] != i && Pi[i] != 0 && i % (i - Pi[i]) == 0) {
			sol = i;
			break;
		}
		//g << sol << "\n";
		printf("%d\n", sol);
	}
	return 0;
}