Cod sursa(job #1478950)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 30 august 2015 09:25:37
Problema Prefix Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 0.62 kb
#include <stdio.h>
#include <string.h>
#define MAX 1000005

int t, i, j, p[MAX], sol;
char s[MAX];

void prefix(char s[]);

int main(){
	freopen("prefix.in", "r", stdin);
	freopen("prefix.out", "w", stdout);
	scanf("%d\n", &t);
	for(i = 0; i < t; i++){
		sol = 0;
		memset(s, 0, MAX);
		scanf("%s\n", s + 1);
		prefix(s);

		for(j = strlen(s + 1); j >= 2; j--)
			if(p[j] && j % (j -p[j]) == 0){
				sol = j;
				break;
			}
		printf("%d\n", sol);
	}
	return 0;
}

void prefix(char s[]){
	int i, k = 0;
	for(i = 2; i <= strlen(s + 1); i++){
		while(k > 0 && s[k + 1] != s[i])
			k = p[k];
		if(s[k + 1] == s[i])
			k++;
		p[i] = k;
	}
}