Cod sursa(job #1936384)

Utilizator AkrielAkriel Akriel Data 23 martie 2017 02:44:04
Problema Prefix Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N = 1000005;

string text;

int lengthText, questions, maximumLength;

int maximum, positionMaximum, mainPeriodLength, solution;;

int prefix[N];

void calculatingPrefixes(){
    int matches = 0;
    for ( int index = 2; index <= lengthText; index++ ){
        for ( ; text[index] != text[matches+1] and matches; )
            matches = prefix[matches];
        if ( text[index] == text[matches+1] )
            matches++;
        prefix[index] = matches;
    }
}

int main(){
    fin >> questions;
    for ( ; questions; questions-- ){
        fin >> text;
        lengthText = text.size();
        maximumLength = max(maximumLength, lengthText);
        text = " " + text;
        for ( int index = 1; index <= maximumLength; index++ )
            prefix[index] = 0;
        maximum = positionMaximum = solution = 0;

        calculatingPrefixes();

        for ( int index = 1; index <= lengthText; index++ ){
            if ( prefix[index] > maximum ){
                maximum = prefix[index];
                positionMaximum = index;
            }
        }
        mainPeriodLength = positionMaximum - maximum;

        for ( int index = positionMaximum; prefix[index]; index-- ){
            if ( index % mainPeriodLength == 0 ){
                solution = index;
                break;
            }
        }
        fout << solution << "\n";
    }
    return 0;
}