Cod sursa(job #1316732)

Utilizator retrogradLucian Bicsi retrograd Data 14 ianuarie 2015 02:34:32
Problema Prefix Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<fstream>
#include<string>
#define MAXN 1000001
using namespace std;

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

int PI[MAXN];
int PER[MAXN];
string SIR;

int compute(int size) {
    PI[1] = 0;
    PER[1] = 1;
    PER[0] = 0;
    int best = 0, per;
    int it = 0;
    for(int i=2; i<=size; i++) {
        while(it && SIR[it] != SIR[i-1])
            it = PI[it];
        if(SIR[it] == SIR[i-1]) {
            it++;
        }
        PI[i] = it;
        per = i - PI[i];
        if(per && i%per==0 && i>per && (per % PER[i-per]) == 0) {
            PER[i] = per;
            best = i;
        } else {
            PER[i] = i;
        }
    }
    return best;
}

int main() {
    int T, i, per, size;
    fin>>T;
    while(T--) {
        fin>>SIR;
        size = SIR.size();
        fout<<compute(size)<<'\n';
    }


    return 0;
}