Cod sursa(job #1323104)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 20 ianuarie 2015 17:41:41
Problema Prefix Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 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 -- ) {
        int ans = 0;
        fin >> s;
        s = "$" + s;
        pi[ 1 ] = 0;
        for( int i = 2; i < ( int )s.size(); ++ 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;
                if ( i % (i - pi[ i ]) == 0 ) {
                    ans = i;
                }
            } else {
                pi[ i ] = 0;
            }
        }
        fout << ans << "\n";
    }
    fin.close();
    fout.close();
    return 0;
}