Cod sursa(job #1005214)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 4 octombrie 2013 15:48:33
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<stdio.h>
#include<string.h>

#define NMAX 1000007

int x, n, T;
int pi[NMAX];
char a[NMAX];

void fa_x (char b[], int i)
{
    while(x > 0 && b[x + 1] != b[i])
        x = pi[x];
    if(b[x + 1] == b[i])
        ++ x;
}

void KMP(char a[NMAX]){
    memset(pi, 0, sizeof(pi));
    for(int i = 2; i <= n; ++ i)
    {
        fa_x(a, i);
        pi[i] = x;
    }
}

int main(){
    freopen("prefix.in", "r", stdin);
    freopen("prefix.out", "w", stdout);
    scanf("%d\n", &T);
    for(; T > 0; -- T){
        gets(a + 1);
        n = strlen(a + 1);
        x = 0;
        KMP(a);
        int poz = 0;
        for(int i = n; i >= 1; -- i)
            if(pi[i] && i % (i - pi[i]) == 0){
                poz = i;
                break;
            }
        printf("%d\n", poz);
    }

}