Cod sursa(job #2560801)

Utilizator Radu_FilipescuFilipescu Radu Radu_Filipescu Data 28 februarie 2020 11:45:54
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 1000005;

int T;
string s;
int lps[NMAX];

void Lps(){

    int lg = 0;

    lps[0] = 0;

    for( int i = 0; i < s.size(); ++i )
      lps[i] = 0;
    for( int i = 1; i < s.size(); ++i )
      if( s[i] == s[lg] ) lps[i] = ++lg;
      else
        if( lg > 0 ) {
           lg = lps[lg - 1];
           --i;
        }
    /*fout << s << '\n';
    for( int i = 0; i < s.size(); ++i )
      fout << lps[i] << ' ';
    fout << "\n\n"; */

    int lmax = 0;
    for( int i = 1; i < s.size(); ++i )
      if( lps[i] * 2 >= i + 1 ) {
         int aux = lps[i] * 2 - i - 1;

        // fout << "** " << i << ' ' << aux << "\n";

         if( aux % ( lps[i] - aux ) == 0 ) lmax = i + 1;
      }


    fout << lmax << '\n';
}

int main()
{
    fin >> T;
    for( int i = 1; i <= T; ++i ) {
       fin >> s;
       Lps();
    }

    return 0;
}