Cod sursa(job #2469639)

Utilizator bluestorm57Vasile T bluestorm57 Data 7 octombrie 2019 20:01:52
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
//wish me luck
#include <bits/stdc++.h>

using namespace std;

ifstream f("prefix.in");
ofstream g("prefix.out");

const int NMAX = 1000005;
int T,pi[NMAX],n;
string s;

void make_prefix(){
    int i,q = 0;
    pi[1] = 0;
    for(i = 2 ; i <= n ; i++){
        while(q && s[q + 1] != s[i])
            q = pi[q];
        if(s[q + 1] == s[i])
            q++;
        pi[i] = q;
    }
}

int main(){
    int i;
    f >> T;
    while(T--){
        f >> s;
        n = s.size();
        s = ' ' + s;
        make_prefix();
        bool ok = 0;
        for(i = n ; i >= 1 ; i--)
            if(pi[i] && i % (i - pi[i]) == 0){
                g << i << "\n" ;
                ok = 1;
                break;
            }
        if(!ok)
            g << 0 << "\n";

    }

    return 0;
}