結果
問題 | No.2927 Reverse Polish Equation |
ユーザー |
![]() |
提出日時 | 2024-10-13 18:04:42 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,897 bytes |
コンパイル時間 | 1,342 ms |
コンパイル使用メモリ | 99,192 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-10-16 00:31:27 |
合計ジャッジ時間 | 3,796 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 15 WA * 28 |
ソースコード
#include<iostream>#include<vector>#include<algorithm>using namespace std;using ll = long long;int main(){cin.tie(nullptr);ios::sync_with_stdio(false);ll q,y;cin>>q>>y;ll n = q;vector<ll> s(n);auto calc = [](string now){ll ans = 0;for(int i = 0;i<now.size();i++){ans *= 10;ans += now[i] - '0';}return ans;};for(int i = 0;i<n;i++){string now;cin>>now;if(now=="X") s[i] = -1;else if(now=="+") s[i] = -2;else if(now=="max") s[i] = -3;else if(now=="min") s[i] = -4;else s[i] = calc(now);}ll right = max(10ll,y + 10);ll left = -1;auto get = [&](ll now) {vector<ll> a;for(int i = 0;i<n;i++){if(s[i]==-1) a.push_back(now);else if(s[i]==-2){ll p = 0;p += a.back();a.pop_back();p += a.back();a.pop_back();if(p>y) return p;a.push_back(p);}else if(s[i]==-3){ll p = 0;p += a.back();a.pop_back();p = max(p,a.back());a.pop_back();if(p>y) return p;a.push_back(p);}else if(s[i]==-4){ll p = 0;p += a.back();a.pop_back();p = min(p,a.back());a.pop_back();if(p>y) return p;a.push_back(p);}else{a.push_back(s[i]);}}return a[0];};while(right-left>1){ll mid = (right+left) / 2;if(get(mid)>=y) right = mid;else left = mid;}if(get(right)==y) cout<<right<<endl;else cout<<-1<<endl;}