제출 #662108

#제출 시각아이디문제언어결과실행 시간메모리
662108fatemetmhrHomework (CEOI22_homework)C++17
100 / 100
193 ms149704 KiB
// heiy ... ye rooze jadid ... #include <bits/stdc++.h> using namespace std; typedef long long ll; #define all(x) x.begin(), x.end() #define pb push_back #define fi first #define se second const int maxn5 = 2e6 + 10; int l[maxn5], r[maxn5], sz[maxn5]; vector <int> adj[maxn5], av; bool ty[maxn5]; void dfs(int v){ if(adj[v].empty()){ l[v] = r[v] = 1; sz[v] = 1; return; } int u = adj[v][0], w = adj[v][1]; dfs(u); dfs(w); sz[v] = sz[u] + sz[w]; if(ty[v]){ int tmpl = sz[u] - r[u] + 1, tmpr = sz[u] - (l[u] - 1); l[u] = tmpl; r[u] = tmpr; swap(u, w); tmpl = sz[u] - r[u] + 1; tmpr = sz[u] - (l[u] - 1); l[u] = tmpl; r[u] = tmpr; } r[v] = sz[v] - (sz[u] - r[u] + sz[w] - r[w] + 1); l[v] = min(l[u], l[w]); if(ty[v]){ int tmpl = sz[v] - r[v] + 1, tmpr = sz[v] - (l[v] - 1); l[v] = tmpl; r[v] = tmpr; } /* cout << "ok " << v << ' ' << u << ' ' << w << ' ' << ty[v] << ' ' << l[v] << ' ' << r[v] << ' ' << sz[v] << endl; cout << l[u] << ' ' << r[u] << ' ' << sz[u] << endl; cout << l[w] << ' ' << r[w] << ' ' << sz[w] << endl; */ } int main(){ ios_base::sync_with_stdio(false); cin.tie(0); string s; cin >> s; int n = s.size(), newnode = 0; for(int i = 0; i < n; i++){ if(s[i] == 'm'){ if(av.size()) adj[av.back()].pb(newnode); av.pb(newnode); ty[newnode] = (s[i + 1] == 'a' ? 1 : 0); i += 3; newnode++; } else if(s[i] == ')'){ av.pop_back(); } else if(s[i] == '?'){ adj[av.back()].pb(newnode); newnode++; } } dfs(0); cout << r[0] - l[0] + 1 << endl; }
#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...