Cod sursa(job #2884794)

Utilizator lolismekAlex Jerpelea lolismek Data 4 aprilie 2022 22:11:06
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <iostream>
#include <fstream>

#pragma GCC optimize("Ofast")

using namespace std;

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

const int N = 1e6;
int kmp[N + 1];

void calc_kmp(string s, int n){
	kmp[1] = 0;
	for(int i = 2; i <= n; i++){
		int l = kmp[i - 1];
		while(l > 0 && s[l + 1] != s[i])
			l = kmp[l];
		l == 0 ? kmp[i] = (s[1] == s[i]) : kmp[i] = l + 1;
	}
}

void solve(){
	string s;
	fin >> s;

	int n = (int)s.size();
	s = "$" + s;

	calc_kmp(s, n);

	int ans = 0;

	for(int period = 1; period <= n; period++)
		if(kmp[period] > 0 && period % (period - kmp[period]) == 0)
			ans = period;

	fout << ans << '\n';
}

int main(){
	int T;
	fin >> T;

	while(T--)
		solve();

	return 0;
}