Cod sursa(job #303037)

Utilizator alecmanAchim Ioan Alexandru alecman Data 9 aprilie 2009 14:50:47
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include<cstdio>
#include<cstring>

using namespace std;

#define INPUT "prefix.in"
#define OUTPUT "prefix.out"

const long NMAX = 1000001;

FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");

char Sir[ NMAX ];
long len, max;
long pre[ NMAX ];

void prefix()
{
  pre[ 0 ] = -1;
  long k = -1;
  
  for(long i = 1; i < len; ++i)
  {
    while(k >= 0 && Sir[ k+1 ] != Sir[ i ]) k = pre[ k ];
    
    if(Sir[ k+1 ] == Sir[ i ]) ++k;
    
    pre[ i ] = k;
    
    if(pre[ i ] >= 0)
      if((i+1)%(i-pre[i])==0 && max < i+1) max = i+1;
  }
  
  fprintf(fout, "%ld\n", max);
}

int main()
{
  int T;
  
  fscanf(fin, "%d", &T);
  
  for(;T--;)
  {
    max = 0;
    
    fscanf(fin, "%s", &Sir);
    len = strlen(Sir);
    
    prefix();
  }
  
  fclose(fin);
  fclose(fout);
  
  return 0;
}