Cod sursa(job #911598)

Utilizator cernat.catallinFMI Cernat Catalin Stefan cernat.catallin Data 11 martie 2013 19:47:11
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#include <string.h>
using namespace std;

#define Nmax 1000005

int t, length, pi[Nmax];
char c[Nmax];
bool found;

inline int prefix(){
    int k = 0;
    pi[0] = 0;
    for(register int i = 2; i <= length; ++i){
        while(c[i] != c[k+1] && k > 0) k = pi[k];
        if(c[i] == c[k+1]) ++k;
        pi[i] = k;
    }
}

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

    scanf("%i", &t);

    for(int i = 1; i <= t; ++i){
        scanf("%s", c+1);
        length = strlen(c+1);
        prefix();
        found = false;
        for(int k = length; k > 0 && !found; --k)
            if(pi[k] && k%(k - pi[k]) == 0){
                found = true;
                printf("%i\n", k);
            }
        if(!found) printf("%i\n", 0);
    }

    fclose(stdin);
    fclose(stdout);

    return 0;
}