Cod sursa(job #1164259)

Utilizator omerOmer Cerrahoglu omer Data 1 aprilie 2014 22:58:00
Problema Prefix Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 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;

        if (kmp[i] != 0) if ( (i+1) == (i+1-kmp[i])*((i+1)/ (i+1-kmp[i]))) 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;
}