Cod sursa(job #1536145)

Utilizator PTAdrian64Pop-Tifrea Adrian PTAdrian64 Data 25 noiembrie 2015 19:39:42
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <cstdio>
#define maxl 1000005
#include <cstring>

using namespace std;

int T,m,pos[maxl],nr,prefix[maxl];
char M[maxl];

void make_prefix();
void KMP();

int main(){
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    scanf("%d",&T);
    int i;
    while(T--){
       M[0]=' ';
       scanf("%s",M+1);
       m=strlen(M);
       nr=0;
       make_prefix();
       KMP();
       printf("%d\n",nr);
    }
    return 0;
}
void make_prefix(){
  int k=0;
  prefix[1]=0;
  for(int i=2;i<=m;i++){
     while(k && M[k+1]!=M[i])k=prefix[k];
     if(M[k+1]==M[i])k++;
     prefix[i]=k;
  }
}
void KMP(){
  for(int i=m;i>=1;i--){
     if(prefix[i] && i%(i-prefix[i])==0){
       nr = i;
       break;
     }
  }
}