結果
| 問題 |
No.2927 Reverse Polish Equation
|
| コンテスト | |
| ユーザー |
cled0328
|
| 提出日時 | 2024-10-12 16:21:26 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 313 ms / 2,000 ms |
| コード長 | 1,309 bytes |
| コンパイル時間 | 2,322 ms |
| コンパイル使用メモリ | 201,396 KB |
| 最終ジャッジ日時 | 2025-02-24 18:31:47 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 43 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int q;
unsigned long long y;
vector<int> eg[1<<18];
string s[1<<18];
unsigned long long ev(long long x){
stack<unsigned long long> st;
for(int i=0;i<q;i++){
if(s[i]=="+"){
unsigned long long a=st.top();st.pop();
unsigned long long b=st.top();st.pop();
st.push(a+b);
}else if(s[i]=="min"){
unsigned long long a=st.top();st.pop();
unsigned long long b=st.top();st.pop();
st.push(min(a,b));
}else if(s[i]=="max"){
unsigned long long a=st.top();st.pop();
unsigned long long b=st.top();st.pop();
st.push(max(a,b));
}else if(s[i]=="X"){
st.push(x);
}else{
st.push(stoll(s[i]));
}
}
return st.top();
}
int main(){
cin>>q>>y;
for(int i=0;i<q;i++)cin>>s[i];
unsigned long long t=ev(0);
if(t>y){
cout<<"-1\n";
return 0;
}
if(t==y){
cout<<"0\n";
return 0;
}
t=ev(100000000000000);
if(t<y){
cout<<"-1\n";
return 0;
}
long long l=0,r=100000000000000;
while(r-l>1){
long long mid=(l+r)/2;
if(ev(mid)<y)l=mid;
else r=mid;
}
cout<<(ev(r)==y?r:-1)<<endl;
}
cled0328