Submission #149717

#TimeUsernameProblemLanguageResultExecution timeMemory
149717Little Piplup (#200)HicCup (FXCUP4_hiccup)C++17
24 / 100
469 ms7504 KiB
#include "hiccup.h" #include<bits/stdc++.h> //using namespace std; int HicCup(std::string S) { int N = S.size(); if ( S[0] != 'H' ) return -1; int up = N+3, down = 0; while( down + 1 < up ) { int cur = (up + down)/2; std::stack<int> boo; //std::cout<<up<<" "<<down<<std::endl; for ( int i = 0 ; i < N ; ++i ) { //push next if ( S[i] == 'H' ) { boo.push(-2); } else if ( S[i] == 'C' ) { boo.push(-1); } else { if ( boo.empty() || boo.top() < 0 ) { //h or c is current boo.push(1); } else { int temp = boo.top(); boo.pop(); boo.push(temp+1); } } //pop if possible while( boo.size() > 2 ){ int c = boo.top(); boo.pop(); int b = boo.top(); boo.pop(); int a = boo.top(); boo.pop(); if ( a == -2 && b == -1 && c >= cur ) { c -= cur; if ( c ) { if ( boo.empty() || boo.top() < 0 ) { boo.push(c); } else { int temp = boo.top(); boo.pop(); boo.push(temp+c); } } } else { boo.push(a); boo.push(b); boo.push(c); break; } } } if ( boo.empty() || (boo.size() == 1 && boo.top() >= 0) ) { down = cur; } else { up = cur; } } if ( down ) { return down; } else { bool done = true; int soo = 0; for ( int i = 0 ; i < N ; ++i ) { if ( S[i] == 'H' ) ++soo; if ( S[i] == 'C' ) --soo; if ( soo < 0 ) done = false; } if ( soo ) done = false; if ( done ) return 0; else return -1; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...