結果
問題 | No.2927 Reverse Polish Equation |
ユーザー |
![]() |
提出日時 | 2024-10-19 17:07:24 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 233 ms / 2,000 ms |
コード長 | 1,302 bytes |
コンパイル時間 | 913 ms |
コンパイル使用メモリ | 77,016 KB |
最終ジャッジ日時 | 2025-02-24 21:36:04 |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 43 |
ソースコード
#include <iostream>#include <vector>#include <cassert>using namespace std;using ll = long long;ll check(ll x, int q, const vector<string> &a){vector<ll> stack;for (int i = 0; i < q; i++){if (a[i] == "X"){stack.emplace_back(x);}else if (a[i] == "+"){assert(stack.size() > 1);auto r = stack.back();stack.pop_back();auto t = stack.back();stack.pop_back();stack.emplace_back(t + r);}else if (a[i] == "min"){assert(stack.size() > 1);auto r = stack.back();stack.pop_back();auto t = stack.back();stack.pop_back();stack.emplace_back(min(t, r));}else if (a[i] == "max"){assert(stack.size() > 1);auto r = stack.back();stack.pop_back();auto t = stack.back();stack.pop_back();stack.emplace_back(max(t, r));}else{stack.emplace_back(stol(a[i]));}}assert(stack.size() == 1);return stack[0];}int main(){int q;ll y;cin >> q >> y;vector<string> a(q);for(auto &i: a) cin >> i;ll mn = -1, mx = y + 100;while(mx - mn > 1){ll md = (mx + mn) / 2ll;if(check(md, q, a) < y) mn = md;else mx = md;}if (check(mx, q, a) == y) cout << mx << endl;else cout << -1 << endl;}