Submission #150493

#TimeUsernameProblemLanguageResultExecution timeMemory
150493Little Piplup (#200)HicCup (FXCUP4_hiccup)C++17
100 / 100
828 ms20568 KiB
#include "hiccup.h" #include<bits/stdc++.h> using std::vector; using std::cout; using std::string; using std::endl; using std::stack; int ans(string S) { int N = S.size(); if ( S[0] != 'H' ) return -1; vector<int> parse; int temp = 0; for ( int i = 0 ; i < N ; ++i ) { if ( S[i] == 'H' ) { if ( temp ) { parse.push_back(temp); temp = 0; } parse.push_back(-2); } else if ( S[i] == 'C' ) { if ( temp ) { parse.push_back(temp); temp = 0; } parse.push_back(-1); } else { ++temp; } } if ( temp ) { parse.push_back(temp); } int size = parse.size(); int up = N+3, down = 0; while( down + 1 < up ) { int cur = (up + down)/2; //std::cout<<up<<" "<<down<<std::endl; stack<int> boo; for ( int i = 0 ; i < size ; ++i ) { //push current boo.push(parse[i]); //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 ) { if ( boo.empty() || boo.top() == -2 || c == cur) { //do nothing } else { //push back c -= cur; if ( boo.top() == -1 ) { 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() ) { down = cur; } else { up = cur; } } return down; } int HicCup(string s) { if(ans(s)==0) { string newstr; for(int i=0; i<s.size(); i++) { newstr.push_back(s[i]); if(s[i]=='C') { newstr.push_back('!'); } } if(ans(newstr)==1) return 0; else return -1; } else return ans(s); }

Compilation message (stderr)

hiccup.cpp: In function 'int HicCup(std::__cxx11::string)':
hiccup.cpp:97:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0; i<s.size(); i++)
                      ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...