Submission #148611

#TimeUsernameProblemLanguageResultExecution timeMemory
148611CHT를 사랑하는 모임 (#200)HicCup (FXCUP4_hiccup)C++17
100 / 100
100 ms4352 KiB
#include "hiccup.h"

#include <bits/stdc++.h>

#define all(v) (v).begin(), (v).end()
#define sortv(v) sort(all(v))
#define uniqv(v) (v).erase(unique(all(v)), (v).end())
#define pb push_back
#define FI first
#define SE second
#define lb lower_bound
#define ub upper_bound
#define mp make_pair
#define test 1
#define TEST if(test)

using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;

const int MOD = 1000000007; // 998244353
const int INF = 2e9;
const ll INFLL = 1e18;
const int MAX_N = 1;


ll cnt, N;
string str;

vector<pii> v;

bool chk(ll x){
	bool chk = false;
	while(!v.empty()){
		v.pop_back();
	}
	for(int i=0; i<N; i++){
		if(str[i]=='H'){
			v.pb({1, 0});
		}else if(str[i]=='C'){
			while(1){
				if(v.empty())	return false;
				pii now = v.back(); v.pop_back();
				if(now.first==1){
					v.pb({2, 0});
					break;
				}else if(now.first==2){
					if(now.second<x){
						return false;
					}
				}
			}
		}else{
			while(1){
				if(v.empty())	return false;
				pii now = v.back(); v.pop_back();
				if(now.first==1){
					return false;
				}
				if(!v.empty() && v.back().first==2 && now.second>=x){
					continue;
				}
				now.second++;
				v.pb(now);
				break;
			}
		}
	}
	while(!v.empty()){
		pii now = v.back(); v.pop_back();
		if(now.first==1 || now.second<x)	return false;
	}
	return v.empty();
}

int HicCup(string S) {
	str = S;
	N = S.size();
	/*for(int i=0; i<N; i++){
		if(S[i]=='H'){
			cnt++;
		}else if(S[i]=='C'){
			if(cnt==0){
				return -1;
			}
			cnt--;
		}
	}
	if(cnt!=0){
		return -1;
	}*/
	int s = 0, e = S.size()-1, m;
	while(s<e){
		m = (s+e)/2+1;
		if(chk((ll)m)){
			s = m;
		}else{
			e = m-1;
		}
	} 
	if(!chk(s)){
		return -1;
	}
	return s;
}

Compilation message (stderr)

hiccup.cpp: In function 'bool chk(ll)':
hiccup.cpp:36:7: warning: unused variable 'chk' [-Wunused-variable]
  bool chk = false;
       ^~~
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...