Cod sursa(job #1318091)

Utilizator hrazvanHarsan Razvan hrazvan Data 15 ianuarie 2015 16:27:26
Problema Prefix Scor 90
Compilator c Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXL 1000000
char sir[MAXL + 1];
int p[MAXL];

inline void kmp(int len){
  int i, k = -1;
  p[0] = -1;
  for(i = 1; i < len; i++){
    while(k > -1 && sir[i] != sir[k + 1])
      k = p[k];
    if(sir[i] == sir[k + 1])
      k++;
    p[i] = k;
  }
}

inline int prefix(int len){
  kmp(len);
  int i, max = 0;
  for(i = 1; i < len; i++){
    if(p[i] > -1){
      if((i + 1) % (i - p[i]) == 0){
        max = i + 1;
      }
    }
  }
  return max;
}

int main(){
  FILE *in = fopen("prefix.in", "r");
  FILE *out = fopen("prefix.out", "w");
  int t, i, len;
  fscanf( in, "%d ", &t );
  for ( i = 0; i < t; i++ ){
    fgets( sir, MAXL + 1, in );
    len = strlen(sir);
    len--;
    fprintf(out, "%d\n", prefix(len));
  }
  fclose(in);
  fclose(out);
  return 0;
}