結果
| 問題 |
No.2927 Reverse Polish Equation
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-10-14 20:43:05 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,892 bytes |
| コンパイル時間 | 116 ms |
| コンパイル使用メモリ | 12,544 KB |
| 実行使用メモリ | 65,860 KB |
| 最終ジャッジ日時 | 2024-10-16 00:34:24 |
| 合計ジャッジ時間 | 6,734 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | TLE * 1 -- * 2 |
| other | -- * 43 |
ソースコード
# evalが悪いだけ説ある
# そもそも線形計画でmin, maxが使えないよという話(ぐぬぬ)
# from pulp import LpProblem, LpVariable, LpInteger, LpMinimize, value, PULP_CBC_CMD
# _,y=map(int,input().split())
# s=list(input().split())
# prob=LpProblem(sense=LpMinimize)
# x=LpVariable('x',lowBound=0,cat=LpInteger)
# sk=[]
# op = {'+': lambda x,y: x+y,
# 'max': lambda x,y: max(x,y),
# 'min': lambda x,y: min(x,y)}
# for t in s:
# if t in op:
# b,a=sk.pop(),sk.pop()
# sk.append(op[t](a,b))
# else: sk.append(x if t=="X" else int(t))
# prob+=sk[0]==y
# prob.solve(PULP_CBC_CMD(msg=False))
# print(int(value(x)) if prob.status==1 else -1)
# 非線形計画だと厳密な整数解は出しにくいよという話(ぐぬぬ)
# ワンチャンいけるかも
from scipy.optimize import minimize
_,y=map(int,input().split())
s=list(input().split())
def f(x):
sk=[]
op = {'+': lambda x,y: x+y,
'max': lambda x,y: max(x,y),
'min': lambda x,y: min(x,y)}
for t in s:
if t in op:
b,a=sk.pop(),sk.pop()
sk.append(op[t](a,b))
else: sk.append(x if t=="X" else int(t))
return sk[0]
def g(x): return abs(f(x[0])-y)
ret=minimize(g,x0=[0],method='Nelder-Mead')
apx=int(ret.x[0])
if f(apx)==y: print(apx)
else: print(-1)
# ニア、僕の勝ちだ
# _,y=map(int,input().split())
# s=list(input().split())
# def f(x):
# sk=[]
# op={'+': lambda x,y: x+y,
# 'max': lambda x,y: max(x,y),
# 'min': lambda x,y: min(x,y)}
# for t in s:
# if t in op:
# b,a=sk.pop(),sk.pop()
# sk.append(op[t](a,b))
# else: sk.append(x if t=="X" else int(t))
# return sk[0]
# ok,ng=(1<<61)-1,-1
# while abs(ok-ng)>1:
# x=(ok+ng)//2
# # print(x, f(x))
# if f(x)>=y: ok=x
# else: ng=x
# print(ok if f(ok)==y else -1)