Cod sursa(job #1335444)

Utilizator gedicaAlpaca Gedit gedica Data 5 februarie 2015 15:34:46
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <algorithm>
#include <string>
#include <cstring>

using namespace std;

const int NMAX= 1000000;

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

string s;
int pi[NMAX+1];

int main()
{
    int T;
    in >> T;

    for( int t= 1; t<=T; ++t )
    {
        in >> s;
        s= "$"+s;

        int N= (int)s.size();

        pi[1]= 0;

        for( int i= 2; i<N; ++i )
        {
            int r= pi[i-1];

            while ( r!= 0 && s[r+1]!= s[i] )
            {
                r= pi[r];
            }
            if ( s[r+1]==s[i] )
            {
                pi[i]= r+1;
            }
            else
            {
                pi[i] = 0;
            }
        }

        int ans= 0;

        for( int i= N-1; i>0; --i )
        {
            if ( pi[i]>0 && i%( i-pi[i] )==0 )
            {
                ans= i;
                break;
            }
        }

        out << ans << '\n';
    }

    return 0;
}