Cod sursa(job #568563)

Utilizator david_raucaRauca Ioan David david_rauca Data 31 martie 2011 13:58:06
Problema Prefix Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<fstream>
#include<vector>
using namespace std;

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

char A[1000001];
int t;

void Read();
void Prefix();

int main()
{
    Read();
    fin.close();
    fout.close();
    
    return 0;
}

void Read()
{
    fin >> t;
    for( int i = 1; i <= t; ++i )
    {
        A[0] = ' ';
        fin >> A+1;
        Prefix();
    }
}

void Prefix()
{
    vector<int> T(strlen(A)+ 1);
    int lungime = 0;
    T[1] = 0;
    int pos = 0;
    for( int i = 2; i <= strlen(A); ++i )
    {
        while( pos > 0 && A[i] != A[pos+1] )
            pos = T[pos];
        
        if( A[i] == A[pos+1] )
           pos++;
        
        T[i] = pos;
        if( T[i] != 0 && i%(i-T[i]) == 0 )
                lungime = i;
    }
    
    fout << lungime << '\n';
}