Submission #1288093

#TimeUsernameProblemLanguageResultExecution timeMemory
1288093stefanneaguHomework (CEOI22_homework)C++20
100 / 100
224 ms153452 KiB
#include <bits/stdc++.h> // #define int long long using namespace std; const int nmax = 2e6 + 1; vector<int> adj[nmax]; pair<int, int> dp[nmax]; int sub[nmax]; bool tip[nmax]; void dfs(int i) { if (adj[i].size() == 0) { sub[i] = 1; dp[i] = {0, 0}; return; } int f1 = -1, f2 = -1; for (auto it : adj[i]) { dfs(it); sub[i] += sub[it]; f2 = f1; f1 = it; } if (tip[i] == 0) { dp[i].first = min(dp[f1].first, dp[f2].first); dp[i].second = dp[f1].second + dp[f2].second + 1; } else { dp[i].second = min(dp[f1].second, dp[f2].second); dp[i].first = dp[f1].first + dp[f2].first + 1; } // cout << i << ": " << dp[i].first << " " << dp[i].second << ", " << sub[i] << '\n'; } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); string s; cin >> s; vector<pair<bool, bool>> v; int n = 0; for (int i = 0; i < s.size(); i++) { n += (s[i] == '?'); if (s[i] == ')') { v.push_back({1, 0}); } if (s[i] == 'm') { if (s[i + 1] == 'a') { v.push_back({0, 1}); } else { v.push_back({0, 0}); } } } stack<int> st; int cnt = 0; for (int i = 0; i < v.size() - 1; i++) { if (v[i].first == 0) { // ( cnt++; tip[cnt] = v[i].second; st.push(cnt); } else { // ) assert(st.size() > 1); int tp = st.top(); st.pop(); int tata = st.top(); adj[tata].push_back(tp); } } int cc = cnt; for (int i = 1; i <= cc; i++) { while (adj[i].size() < 2) { cnt++; adj[i].push_back(cnt); } } dfs(1); cout << (n - 1 - dp[1].second) - dp[1].first + 1; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...