Cod sursa(job #1429723)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 6 mai 2015 23:24:05
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>
#include <cstring>
#define DIM 1048576
using namespace std;

FILE *fin = fopen("prefix.in", "r");
FILE *fout= fopen("prefix.out","w");

int N, P[DIM], T, maxim, i, L; char A[DIM], c;

int main(){
    fscanf(fin, "%d", &T);
    fscanf(fin, "%c", &c);
    for(; T; T--){
        fgets(A + 1, DIM, fin);
        N = strlen(A + 1);
        maxim = 0; L = 0;
        for(i = 2; i <= N; i ++){
            while(L != 0 && A[i] != A[L+1])
                L = P[L];
            if(A[i] == A[L+1])
                L ++;
            P[i] = L;
        } i --;
        while(i > 0 && !(P[i] > 0 && i % (i-P[i]) == 0))
            i --;
        fprintf(fout, "%d\n", i);
    }
    return 0;
}