Cod sursa(job #1340615)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 11 februarie 2015 22:13:43
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <fstream>
#include <cstring>
#define DIM 1000002

using namespace std;

ifstream fin("prefix.in");
ofstream fout("prefix.out");
int T, P[DIM], N , i , L , sol , n;
char A[DIM];
int main(){
    fin >> T;
    while ( T -- ){
        fin >> A + 1;
        P[1] = 0;
        L = 0;
        n = strlen(A + 1);
        for(  i = 2 ; i <= n ; i ++){
            while (L != 0  &&   A[i]!=A[L+1])
                L = P[L];
            if(A[i] ==  A[L+1])
                L++;
            P[i] = L;
        }
        sol = 0;
        for ( i = n ; i > 0 ;i --)
            if( P[i] > 0 && i % ( i - P[i] ) == 0 ){
                sol = i;
                break;
            }
        fout<<sol<<'\n';
    }
    fin.close();fout.close();
    return 0;
}