Cod sursa(job #179207)

Utilizator tm_raduToma Radu tm_radu Data 15 aprilie 2008 18:59:34
Problema Prefix Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>
#include <string.h>
#define NM 1000001

int t, n;
char s[NM];
int p[NM];
int i, j, k, kmax;

void Prefix();

int main()
{
    freopen("prefix.in", "r", stdin);
    freopen("prefix.out", "w", stdout);
    scanf("%d", &t);
    while ( t )
    {
        t--;
        scanf("%c", &s[0]), scanf("%s", &s);
        Prefix();
        for ( k = 2; k <= n; k++ )
            if ( p[k] > 0 && k % (k-p[k]) == 0 )
                kmax = k;
        printf("%d\n", kmax);
    }
    return 0;
}

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