Cod sursa(job #1150844)

Utilizator cbanu96Banu Cristian cbanu96 Data 23 martie 2014 16:41:46
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#include <cstring>

using namespace std;

#define FILEIN "prefix.in"
#define FILEOUT "prefix.out"
#define LENMAX 1000003

int T, Len;
char S[LENMAX];
int P[LENMAX];

void prefix() {
    P[0] = P[1] = 0;
    for ( int i = 2, k = 0; i <= Len; i++ ) {
        while ( k > 0 && S[k+1] != S[i]) {
            k = P[k];
        }

        if (S[k+1] == S[i])
            k++;

        P[i] = k;
    }
}

int main() {
    freopen(FILEIN, "r", stdin);
    freopen(FILEOUT, "w", stdout);

    for (scanf("%d\n", &T); T; T--) {
        fgets(S+1, LENMAX, stdin);
        if (S[strlen(S+1)] == '\n')
            S[strlen(S+1)] = '\0';

        Len = strlen(S+1);

        prefix();

        int sol = 0;
        for ( int i = Len, tmp; i >= 1; i--) {
            tmp = i - P[i];

            if (!P[i]) continue;
            if (!tmp) continue;

            if (i % tmp == 0) {
                sol = i;
                break;
            }
        }

        printf("%d\n", sol);
    }


    return 0;
}