Submission #149897

#TimeUsernameProblemLanguageResultExecution timeMemory
149897팀명못정해서15시간째고민중인팀 (#200)HicCup (FXCUP4_hiccup)C++17
24 / 100
303 ms7416 KiB
#include "hiccup.h"
#include<bits/stdc++.h>
using namespace std;

int HicCup(std::string S) {
	int n=S.size();
	bool chk=true,av=false;
	int t=0;
	for(auto i:S){
        if(i=='H') t++,av=false;
        if(i=='C'){
            if(t) t--,av=true;
            else chk=false;
        }
        if(i=='!'&&!av) chk=false;
	}
	if(t||!chk) return -1;

	int l=0,r=1000000,Max=0;
	while(l<=r){
        int mid=(l+r)/2;
        bool ichk=true;
        //printf("%d %d %d\n",l,r,mid);
        stack<pair<int,int>> st;
        for(auto i:S){
            //printf("%c\n",i);
            //if(!st.empty()) printf("%d %d\n",st.top().first,st.top().second);
            if(i=='H') st.push({1,0});
            if(i=='C'){
                if(!st.empty()){
                    if(st.top().first==1) st.pop(),st.push({2,0});
                    else if(st.top().second<mid) {ichk=false;break;}
                }
            }
            if(i=='!'&&!st.empty()){
                if(!st.empty()&&st.top().first==2){
                    int c=st.top().second; st.pop();
                    st.push({2,c+1});
                }
                while(!st.empty()&&st.top().first==2&&st.top().second==mid) st.pop();
            }
        }
        while(!st.empty()&&st.top().second==mid) st.pop();
        if(st.empty()&&ichk) Max=max(Max,mid),l=mid+1;
        else r=mid-1;
        //printf("\n");
	}
	return Max;
}

Compilation message (stderr)

hiccup.cpp: In function 'int HicCup(std::__cxx11::string)':
hiccup.cpp:6:6: warning: unused variable 'n' [-Wunused-variable]
  int n=S.size();
      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...