Cod sursa(job #2226238)

Utilizator mihai.alphamihai craciun mihai.alpha Data 29 iulie 2018 22:34:47
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>

using namespace std;

const int maxs = 1e6 + 5;

char s[maxs];
int pi[maxs];

int main()  {
	ifstream fin("prefix.in");
	ofstream fout("prefix.out");
    int T;
    fin >> T;
    for(int z = 1;z <= T;z++)  {
        fin >> s + 1;
//        cerr << s + 1 << "\n";
        int n = strlen(s + 1);
        while(!isalpha(s[n]))
            n--;
        pi[1] = 0;
        int k = 0;
        for(int i = 2;i <= n;i++)  {
            while(k && s[i] != s[k + 1])
                k = pi[k];
            if(s[i] == s[k + 1])
                k++;
            pi[i] = k;
        }
        int maxi = 0;
        for(int i = 2;i <= n;i++)  {
            if(pi[i] != 0 && i % (i - pi[i]) == 0)
                maxi = i;
        }
        fout << maxi << "\n";
    }
	fin.close();
	fout.close();
	return 0;
}