Cod sursa(job #1318098)

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

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