Submission #149594

#TimeUsernameProblemLanguageResultExecution timeMemory
149594etyu (#200)HicCup (FXCUP4_hiccup)C++17
100 / 100
86 ms4352 KiB
#include "hiccup.h"
#include <vector>

std::string s;
int N;
std::vector<int> st;

bool ps(int l)
{
	st.clear();
	for (int i = 0; i < N; i++) {
		if (s[i] == 'H') st.push_back(-1);
		else if (s[i] == 'C') {
			if (st.back() != -1) return false;
			st.back() = 0;
			if (l == 0) st.pop_back();
		}
		else {
			if (st.empty() || st.back() == -1) continue;
			st.back()++;
			if (st.back() >= l) st.pop_back();
		}
	}
	return st.empty();
}

int bs(int s, int e)
{
	int md = (s + e + 1) / 2;
	if (s >= e) return md;
	if (ps(md)) return bs(md, e);
	else return bs(s, md - 1);
}

int HicCup(std::string S) {
	N = S.size();
	s = S;
	int c = 0;
	bool f = false;
	for (int i = 0; i < N; i++) {
		if (S[i] == 'H') {
			f = false; c++;
		}
		else if (S[i] == 'C') {
			f = true; c--;
		}
		else if (!f) return -1;
		if (c < 0) return -1;
	}
	if (c != 0) return -1;
	return bs(0, N);
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...