Cod sursa(job #1277385)

Utilizator lokixdSebastian lokixd Data 27 noiembrie 2014 16:47:52
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstring>
#include <fstream>
#include <vector>
#include <cstdlib>
 
 
 
using namespace std  ;
 
const int NMAX = 1000005 ;
const int INF = 0x3f3f3f3f ;
 
ifstream fin("prefix.in") ;
ofstream fout("prefix.out") ;
 
int A[NMAX] ;
char C[NMAX] ;
int sol = 0 ;
int T ;
 
int main()
{
            fin >> T ;
 
            fin.get() ;
 
 
            while( T --)
            {
                fin >> C + 1;
 
                A[1] = 0 ;
 
                for(int i = 2 ; C[i] != NULL; ++ i)
                {
                    int actual = A[i - 1] ;
 
                    while(actual && C[i] != C[actual  + 1])
                        actual = A[actual] ;
 
                    if(C[i] == C[actual + 1])
                            A[i] = actual + 1 ;
                    else A[i] = 0 ;
                }
 
                sol = 0 ;
 
                for(int i = strlen(C + 1) ; i >= 1; -- i)
                    if(A[i] != i && A[i] != 0 && i % (i - A[i]) == 0)
                {
 
                    sol = i ;
                    break ;
                }
 
                fout << sol << '\n' ;
            }
 
 
    fin.close() ;
    fout.close() ;
    return 0 ;
}