Submission #735868

#TimeUsernameProblemLanguageResultExecution timeMemory
735868tch1cherinHomework (CEOI22_homework)C++17
100 / 100
470 ms202296 KiB
#include <bits/stdc++.h> using namespace std; vector<vector<int>> g; vector<int> t, S, Min, Max; void DFS(int u) { if (t[u] == 3) { Min[u] = Max[u] = S[u] = 1; return; } for (int v : g[u]) { DFS(v); S[u] += S[v]; if (t[u] == 1) { Max[u] += S[v] - Max[v] + 1; } else { Min[u] += Min[v]; } } if (t[u] == 1) { Min[u] = S[u]; for (int v : g[u]) { Min[u] = min(Min[u], Min[v]); } Max[u] = S[u] - Max[u] + 1; } else { Max[u] = 1; for (int v : g[u]) { Max[u] = max(Max[u], S[u] - (S[v] - Max[v])); } } } int main() { string s; cin >> s; int N = (int)s.size(); stack<int> st; for (int i = 0; i < N; i++) { if (i + 2 < N && s[i] == 'm' && s[i + 1] == 'i' && s[i + 2] == 'n') { st.push((int)g.size()); g.push_back({}); t.push_back(1); } else if (i + 2 < N && s[i] == 'm' && s[i + 1] == 'a' && s[i + 2] == 'x') { st.push((int)g.size()); g.push_back({}); t.push_back(2); } else if (s[i] == '?') { g[st.top()].push_back((int)g.size()); g.push_back({}); t.push_back(3); } else if (s[i] == ')') { int x = st.top(); st.pop(); if (!st.empty()) { g[st.top()].push_back(x); } } } S = Min = Max = vector<int>(g.size()); DFS(0); cout << Max[0] - Min[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...