Submission #734687

#TimeUsernameProblemLanguageResultExecution timeMemory
734687tch1cherinHomework (CEOI22_homework)C++17
13 / 100
595 ms319684 KiB
#include <bits/stdc++.h> using namespace std; vector<vector<int>> g; vector<int> t, l, r; int n = 0; void DFS(int u) { l[u] = n, r[u] = 1; vector<int> same, adj; for (int v : g[u]) { if (t[v] == t[u]) { same.push_back(v); } else { adj.push_back(v); } } while (!same.empty()) { int x = same.back(); same.pop_back(); for (int v : g[x]) { if (t[v] == t[u]) { same.push_back(v); } else { adj.push_back(v); } } } g[u] = adj; for (int v : g[u]) { DFS(v); l[u] = min(l[u], l[v]); r[u] = max(r[u], r[v]); } if (t[u] == 1) { r[u] -= g[u].size() - 1; } else if (t[u] == 2) { l[u] += g[u].size() - 1; } else { l[u] = 1, r[u] = n; } } int main() { string s; cin >> s; int k = (int)s.size(); stack<int> st; for (int i = 0; i < k; i++) { if (s[i] == ')') { int x = st.top(); st.pop(); if (!st.empty()) { g[st.top()].push_back(x); } } else if (s[i] == '?') { g.push_back({}); t.push_back(3); g[st.top()].push_back((int)g.size() - 1); n++; } else if (i + 2 < k && s[i] == 'm' && s[i + 1] == 'i' && s[i + 2] == 'n') { g.push_back({}); t.push_back(1); st.push((int)g.size() - 1); } else if (i + 2 < k && s[i] == 'm' && s[i + 1] == 'a' && s[i + 2] == 'x') { g.push_back({}); t.push_back(2); st.push((int)g.size() - 1); } } l = r = vector<int>(g.size()); DFS(0); cout << r[0] - l[0] + 1 << "\n"; }
#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...