Cod sursa(job #1164265)

Utilizator omerOmer Cerrahoglu omer Data 1 aprilie 2014 23:00:59
Problema Prefix Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<stdio.h>
#include<string.h>
const int N=1000001;
using namespace std;
FILE *f,*g;

int t; int kmp[N]; char c[N];

void read(void){

    f=fopen("prefix.in","r");
    g=fopen("prefix.out","w");

    fscanf(f,"%d",&t);
}

void knuthmp(char c[],int n){

    int i; int k=-1; int max=0;    
    
    kmp[0]=0;
    
    for(i=1; i<=n-1; i++){

        while (k>-1 && c[k+1] != c[i]) k=kmp[k]-1;

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

        kmp[i]=k+1;

    }
    for(i=1;i<=n-1;i++) if (kmp[i] != 0 && (i+1)%(i+1-kmp[i]) == 0) max=i+1;
    fprintf(g,"%d\n",max);
    
    
}

void solve(void){

    int i;int j;int n;
    for(i=1;i<=t;i++){
    
        fscanf(f,"%s\n",c);
        
        n=strlen(c);
    
        knuthmp(c,n);
    }
}

int main(void){

    read();
    solve();
    return 0;
}