Submission #750241

#TimeUsernameProblemLanguageResultExecution timeMemory
750241MetalPowerHomework (CEOI22_homework)C++14
100 / 100
242 ms205868 KiB
#include <bits/stdc++.h> using namespace std; #define pii pair<int, int> #define fi first #define se second const int MX = 2e6 + 10; string s; int tim = 0, tp[MX], lf[MX], rg[MX], sub[MX]; vector<int> st, adj[MX]; void dp(int idx){ if(tp[idx] == 0){ sub[idx] = lf[idx] = rg[idx] = 1; }else{ for(int nxt : adj[idx]){ dp(nxt); sub[idx] += sub[nxt]; } if(tp[idx] == 1){ // max lf[idx] = lf[adj[idx][0]] + lf[adj[idx][1]]; rg[idx] = max(sub[adj[idx][0]] + rg[adj[idx][1]], sub[adj[idx][1]] + rg[adj[idx][0]]); }else{ // min lf[idx] = min(lf[adj[idx][0]], lf[adj[idx][1]]); rg[idx] = rg[adj[idx][0]] + rg[adj[idx][1]] - 1; } } } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> s; for(int i = 0; i < (int) s.length(); ){ if(s[i] == '(' || s[i] == ','){ i++; }else if(s[i] == 'm'){ if(s[i + 1] == 'a'){ ++tim; tp[tim] = 1; if(!st.empty()) adj[st.back()].push_back(tim); st.push_back(tim); }else{ ++tim; tp[tim] = 2; if(!st.empty()) adj[st.back()].push_back(tim); st.push_back(tim); } i += 3; }else if(s[i] == '?'){ ++tim; tp[tim] = 0; adj[st.back()].push_back(tim); i++; }else if(s[i] == ')'){ st.pop_back(); i++; } } dp(1); cout << rg[1] - lf[1] + 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...