Cod sursa(job #2335236)

Utilizator AlexandruPaulSirbu Alex AlexandruPaul Data 3 februarie 2019 19:52:33
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <iostream>
#include <fstream>
using namespace std;
const int Maxx=1e6+1;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
int pi[Maxx];
int test,rtt;
int solve();
string A;
int main() {
    fin>>test;
    for (;test;--test){
        fin>>A;
        rtt=solve();
        if (rtt==1) rtt=0;
        fout<<rtt<<"\n";
    }
    return 0;
}
int solve(){
    int q=0,i;
    int len=A.size();
    A.insert(0," ");
    for (i=1;i<=len;++i) pi[i]=0;
    for (i=2;i<=len;++i){
        while (q && A[q+1]!=A[i]){
            q=pi[q];
        }
        if (A[q+1]==A[i]){
            ++q;
        }
        pi[i]=q;
    }
    for (i=len;i>0;--i){
        if (pi[i]>=(i+1)/2 && pi[i]%(i-pi[i])==0){
            return i;
        }
    }
}