제출 #1226167

#제출 시각아이디문제언어결과실행 시간메모리
1226167slivajanHomework (CEOI22_homework)C++20
100 / 100
262 ms41524 KiB
#include <bits/stdc++.h> using namespace std; using un = long long; using vuc = vector<un>; using vol = vector<bool>; #define REP(i, a, b) for (un i = (un)a; i < (un)b; i++) #define FEAC(i, a) for (auto i : a) #define vec vector #define ALL(x) (x).begin(), (x).end() #define MAX 0 #define MIN 1 tuple<un, un, un> leaf = {0, 0, 1}; struct Node { bool isReady = false; tuple<un, un, un> levy; bool typ; Node(bool t) : typ(t) {} void setLeft(tuple<un, un, un> l){ levy = l; isReady = true; } tuple<un, un, un> eval(tuple<un, un, un> pravy){ auto [X1, X2, N] = levy; auto [Y1, Y2, M] = pravy; un K = N+M; un A, B; if (typ == MIN){ A = min(X1, Y1); B = X2 + Y2; } else if (typ == MAX){ A = K - (N-X1-1) - (M-Y1-1) - 1; B = K - min(N-X2-1, M-Y2-1) - 1; } return {A, B, K}; } }; int main(){ stack<Node> zasoba; tuple<un, un, un> ret; do { char c, trash; cin >> c; while((c == ')') or (c == ',')) cin >> c; if (c == '?') { tuple<un, un, un> curr = leaf; while((not zasoba.empty()) and (zasoba.top().isReady)){ curr = zasoba.top().eval(curr); zasoba.pop(); } if (zasoba.empty()) ret = curr; else { zasoba.top().setLeft(curr); } } else if (c == 'm'){ cin >> c >> trash >> trash; if (c == 'a') zasoba.emplace(MAX); else zasoba.emplace(MIN); } } while (not zasoba.empty()); auto [X, Y, ignore] = ret; cout << (Y-X) + 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...