Submission #149158

#TimeUsernameProblemLanguageResultExecution timeMemory
149158mit한의대지망생 (#200)HicCup (FXCUP4_hiccup)C++17
100 / 100
90 ms16224 KiB
#include "hiccup.h" #include <algorithm> #include <vector> #include <tuple> using namespace std; typedef pair<int, int> pii; int n; char S[1000001]; int nxt[1000002]; int prv[1000002]; vector<pii> P; bool check(int x) { for (int i = 1; i <= n; ++i) { nxt[i] = i + 1; prv[i] = i - 1; } for (pii _i : P) { int a, b; tie(a, b) = _i; int cnt = 0, i; for (i = nxt[b]; cnt < x && i <= n && S[i] == '!'; i = nxt[i], ++cnt); if (cnt < x) return 0; if (nxt[a] == b) { nxt[prv[a]] = i; prv[i] = prv[a]; } else { nxt[prv[a]] = nxt[a]; prv[nxt[a]] = prv[a]; nxt[prv[b]] = i; prv[i] = prv[b]; } } return 1; } int HicCup(string _S) { n = _S.length(); vector<int> st; S[0] = 'H'; for (int i = 0; i < n; ++i) { S[i + 1] = _S[i]; if (S[i + 1] == 'H') st.push_back(i + 1); else if (S[i + 1] == 'C') { if (st.empty()) return -1; P.emplace_back(st.back(), i + 1); st.pop_back(); } if (S[i] == 'H' && S[i + 1] == '!') return -1; } if (!st.empty()) return -1; if (P.empty()) return -1; int s = 0, e = n; sort(P.begin(), P.end(), [&](pii a, pii b) { return a.first > b.first; }); while (s < e) { int m = (s + e + 1) / 2; if (check(m)) s = m; else e = m - 1; } return s; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...