Cod sursa(job #568542)

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

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

string A;
int t;

void Read();
void Prefix();

int main()
{
    Read();
    string a = "mama";
    fin.close();
    fout.close();
    
    return 0;
}

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

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