Cod sursa(job #22942)

Utilizator ProstuStefan-Alexandru Filip Prostu Data 27 februarie 2007 20:50:38
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.66 kb
#include <cstdio>

const int NMAX = 1 << 20;

char S[NMAX];
int pi[NMAX];
int D[NMAX];

void prefix(int &mx) {
	int i, j;

	pi[0] = pi[1] = 0;

	for (j = 0, i = 2; S[i - 1] && S[i - 1] != '\n'; ++i) {
		while (j > 0 && S[j] != S[i - 1]) j = pi[j];

		if (S[j] == S[i - 1]) ++j;
		pi[i] = j;

		D[i] = -1;

		if (D[j] != -1 && j + D[j] == i) D[i] = D[j], mx = i;
		if (j + j == i) D[i] = j, mx = i;
	}
}

int main() {
	FILE *fin = fopen("prefix.in", "rt");
	FILE *fout = fopen("prefix.out", "wt");
	int t, rez;

	fscanf(fin, "%d\n", &t);

	while (t--) {
		
		fgets(S, NMAX, fin);

		prefix(rez = 0);

		fprintf(fout, "%d\n", rez);

	}

	fclose(fin);
	fclose(fout);

	return 0;
}