Cod sursa(job #662652)

Utilizator vendettaSalajan Razvan vendetta Data 16 ianuarie 2012 21:21:34
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>
#include <cstring>
#define nmax 1000002

using namespace std;

char S[nmax];
int T, n, urm[nmax], Sol;

void citeste(){

    scanf("%d\n", &T);

}

void prelucreaza(){

    int k = 0;
    urm[1] = 0;

    for(int i=2; i<=n; ++i){
        while (k>0 && S[k+1] != S[i]) k = urm[k];
        if (S[k+1] == S[i]) ++k;
        urm[i] = k;
    }

}

void rezolva(){

    for(; T; --T){
        scanf("%s", S+1);
        n = strlen(S+1);
        prelucreaza();
        Sol = 0;
        for(int i=1; i<=n; ++i){
            if (urm[i] > 0 && (i % (i-urm[i]) == 0) )
                Sol = i;
        }
        printf("%d\n", Sol);
    }

}

int main(){

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

    citeste();
    rezolva();

    fclose(stdin);
    fclose(stdout);

    return 0;

}