Cod sursa(job #2130131)

Utilizator lessanleonard savu lessan Data 13 februarie 2018 14:18:29
Problema Prefix Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {

    FILE *fin;
    FILE *fout;

    char s[1000001];

    int *prefix,t,lungime_cuvant,k,ln,lnmax;

    fin = fopen("prefix.in","rt");
    fout = fopen("prefix.out","wt");

    fscanf(fin,"%d\n",&t);

    for(int i=1;i<=t;i++){

        fscanf(fin,"%s",s);

        lungime_cuvant = strlen(s);
        k=0;

        prefix = (int *)calloc(lungime_cuvant,sizeof(int));

        for(int j=1;j<lungime_cuvant;j++){
            while(k!=0 && s[j]!=s[k])
                k=*(prefix+k-1);
            if(s[j] == s[k])
                k++;
            *(prefix+j) = k;
        }
        lnmax = 0;
        for(int j=0;j<lungime_cuvant;j++){
            k=j;
            if(*(prefix+j) == 1){
                while( *(prefix+j) == (*(prefix+j+1)-1) && j<lungime_cuvant) {
                    j++;
                }
                if( *(prefix+j) >= k){
                    ln = *(prefix+j) - *(prefix+j)%k + k;
                    if(ln > lnmax)
                        lnmax = ln;
                }
            }
        }
        fprintf(fout,"%d\n",lnmax);
        free(prefix);
    }
    return 0;
}