Cod sursa(job #3147901)

Utilizator daristyleBejan Darius-Ramon daristyle Data 27 august 2023 22:19:42
Problema Prefix Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <fstream>

using namespace std;

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

const int STRLEN_MAX = 1e6;
char str[STRLEN_MAX + 1];
int lps[STRLEN_MAX];

void ComputeLPS(const char *s){
	int i = 1, pslen;
	lps[0] = 0;
	while(s[i]){
		pslen = lps[i - 1];

		while(pslen && s[pslen] != s[i])
			pslen = lps[pslen - 1];

		if(s[pslen] == s[i])
			lps[i] = pslen + 1;
		else
			lps[i] = 0;

		++i;
	}
}

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

	for(int test = 0; test < tests; ++test){
		fin >> str;
		if(test == 2)
			int y = 5;

		ComputeLPS(str);

		int i = 0, ans = 0, pLen;
		while(str[i]){
			pLen = i + 1 - lps[i];
			if(pLen != i + 1 && (i + 1) % pLen == 0)
				ans = i + 1;

			++i;
		}

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

	fin.close();
	fout.close();
	return 0;
}