Cod sursa(job #2637287)

Utilizator andreic06Andrei Calota andreic06 Data 22 iulie 2020 12:31:10
Problema Prefix Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <iostream>
#include <fstream>

using namespace std;
const int N = 1e6;
int lps[N]; char sir[N];

void prefix_kmp ( int n ) {
   lps[0] = 0;

   int i = 1, len = 0;

   while ( i < n ) {
      if ( sir[i] == sir[len] )
        len ++, lps[i] = len, i ++;
      else if ( len > 0 )
        len = lps[len-1];
      else
        lps[i] = 0, i ++;
   }
}


ifstream fin ( "prefix.in" );
ofstream fout ( "prefix.out" );

int main()
{
   int t;
   fin >> t, fin.get ();

   while ( t -- ) {
      char ch = fin.get ();
      int n = 0;
      while ( ch != '\n' ) {
         sir[n++] = ch;
         ch = fin.get ();
      }

      prefix_kmp ( n );
      int maxx = -1;
      for ( int i = 0; i < n; i ++ )
         if ( lps[i] > 0 && ( i + 1 ) % ( i + 1 - lps[i] ) == 0 )
           maxx = i;
      fout << maxx + 1 << '\n';

   }
    return 0;
}