Cod sursa(job #1323107)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 20 ianuarie 2015 17:44:56
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<fstream>

using namespace std;

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

const int nmax = 1000000;
int pi[ nmax + 1 ];
string s;

int main() {
    int q;
    fin >> q;
    while ( q -- ) {
        fin >> s;
        s = "$" + s;
        pi[ 1 ] = 0;
        int n = ( int )s.size();
        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;
            }
        }
        fout << ans << "\n";
    }
    fin.close();
    fout.close();
    return 0;
}