Cod sursa(job #2637286)

Utilizator andreic06Andrei Calota andreic06 Data 22 iulie 2020 12:28:36
Problema Prefix Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 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 len = 0;

   for ( int i = 1; i <= n; i ++ ) {
      while ( len > 0 && sir[len] != sir[i] )
         len = lps[len-1];
      if ( sir[len] == sir[i] )
        len ++;
      lps[i] = len;
   }
}


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;
}