Cod sursa(job #1255242)

Utilizator gerd13David Gergely gerd13 Data 4 noiembrie 2014 15:56:38
Problema Prefix Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 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] != 0; ++ 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 ;
}