Cod sursa(job #2061916)

Utilizator netfreeAndrei Muntean netfree Data 9 noiembrie 2017 20:37:10
Problema Prefix Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <bits/stdc++.h>

using namespace std;

const int N_MAX = 1000000 + 5;

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

char P[N_MAX], key[N_MAX];
int q;

void build_key(){
    int k = 0, m = strlen(P+1); key[0] = 0;

    for(int i = 2; i<=m; ++i){
        while(P[i] != P[k+1] and k > 0)
            k = key[k];
        if(P[i] == P[k+1])
            k ++;
        key[i] = k;
    }
}

int main()
{
    fin >> q;

    while(q--){
        fin >> (P+1);
        build_key();
        int maxx = 0, n = strlen(P+1);
        for(int i = 1; i<=n; ++i){
            if(key[i]){
                int x = i - key[i];
                if(i % x == 0)
                    maxx = i;
            }
        }
        fout << maxx << "\n";
    }
    return 0;
}