結果
問題 | No.2927 Reverse Polish Equation |
ユーザー |
![]() |
提出日時 | 2024-10-12 15:33:33 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,035 bytes |
コンパイル時間 | 3,459 ms |
コンパイル使用メモリ | 255,592 KB |
実行使用メモリ | 11,348 KB |
最終ジャッジ日時 | 2024-10-16 00:23:05 |
合計ジャッジ時間 | 7,559 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 33 WA * 10 |
ソースコード
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define REP(i, x, y) for (auto i = (x); i < (y); i++) #define RREP(i, x, y) for (auto i = (y) - 1; (x) <= i; i--) #define ALL(x) (x).begin(), (x).end() #pragma GCC optimize("O3") int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); ll Q, Y; cin >> Q >> Y; vector<string> S(Q); REP(i, 0, Q){ cin >> S[i]; } ll l = -1, r = 1000000000000LL; while(1){ if(l + 1 == r)break; ll c = (l + r) / 2; vector<ll> A; REP(i, 0, Q){ if(S[i] == "X"){ A.push_back(c); }else if(S[i] == "+"){ ll tmp = A[ssize(A)-1] + A[ssize(A)-2]; A.pop_back(); A.pop_back(); A.push_back(tmp); }else if(S[i] == "min"){ ll tmp = min(A[ssize(A)-1], A[ssize(A)-2]); A.pop_back(); A.pop_back(); A.push_back(tmp); }else if(S[i] == "max"){ ll tmp = max(A[ssize(A)-1], A[ssize(A)-2]); A.pop_back(); A.pop_back(); A.push_back(tmp); }else{ A.push_back(stoll(S[i])); } } // cerr << c << " " << A[0] << "\n"; if(Y <= A[0]){ r = c; }else{ l = c; } // cerr << "l " << l << " r " << r << "\n"; } { vector<ll> A; REP(i, 0, Q){ if(S[i] == "X"){ A.push_back(r); }else if(S[i] == "+"){ ll tmp = A[ssize(A)-1] + A[ssize(A)-2]; A.pop_back(); A.pop_back(); A.push_back(tmp); }else if(S[i] == "min"){ ll tmp = min(A[ssize(A)-1], A[ssize(A)-2]); A.pop_back(); A.pop_back(); A.push_back(tmp); }else if(S[i] == "max"){ ll tmp = max(A[ssize(A)-1], A[ssize(A)-2]); A.pop_back(); A.pop_back(); A.push_back(tmp); }else{ A.push_back(stoll(S[i])); } } if(A[0] == Y){ cout << r << "\n"; }else{ cout << -1 << "\n"; } } return 0; } /* File : ~/yukicoder/midoriika_3rd/I.cpp Date : 2024/10/12 Time : 15:15:17 */