結果
| 問題 | No.1151 チャレンジゲーム |
| コンテスト | |
| ユーザー |
titia
|
| 提出日時 | 2026-05-13 05:39:07 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 1,017 ms / 2,000 ms |
| コード長 | 2,361 bytes |
| 記録 | |
| コンパイル時間 | 146 ms |
| コンパイル使用メモリ | 85,248 KB |
| 実行使用メモリ | 112,748 KB |
| 最終ジャッジ日時 | 2026-05-13 05:39:48 |
| 合計ジャッジ時間 | 28,248 ms |
|
ジャッジサーバーID (参考情報) |
judge1_1 / judge3_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 50 |
ソースコード
import sys
input = sys.stdin.readline
N=int(input())
A=list(map(int,input().split()))
ALL=(1<<N)-1
from functools import lru_cache
@lru_cache(maxsize=None)
def calc(p1,p2,use,te):
#print(p1,p2,use,te)
if use==ALL:
if p1>p2:
return 1
else:
return 0
#print("!")
if te==0:
ANS=0
for i in range(N):
if (1<<i) & use !=0:
continue
if A[i]==1:
ANS=max(ANS,calc(p1+1,p2,use|(1<<i),1))
sc=100
for j in range(N):
if (1<<j) & use !=0:
continue
a=A[i]
b=A[j]
if a==1:
continue
if b==1:
pro1=1/a
pro2=1-pro1
else:
x=(a-1)/a*(b-1)/b
y=1/(1-x)
pro1=y/a
pro2=y*(a-1)/a/b
#print(p1,p2,use,te,a,b,x,pro1,pro2)
#print("!",a,b,pro1,calc(p1+a,p2,use|(1<<i),1) ,pro2, calc(p1,p2+b,use|(1<<j),0),pro1*calc(p1+a,p2,use|(1<<i),1) + pro2*calc(p1,p2+b,use|(1<<j),0))
sc=min(sc,pro1*calc(p1+a,p2,use|(1<<i),1) + pro2*calc(p1,p2+b,use|(1<<j),0))
if sc!=100:
ANS=max(ANS,sc)
return ANS
else:
ANS=1
for i in range(N):
if (1<<i) & use !=0:
continue
if A[i]==1:
ANS=min(ANS,calc(p1,p2+1,use|(1<<i),0))
sc=-100
for j in range(N):
if (1<<j) & use !=0:
continue
a=A[i]
b=A[j]
if a==1:
continue
if b==1:
pro1=1/a
pro2=1-pro1
else:
x=(a-1)/a*(b-1)/b
y=1/(1-x)
pro1=y/a
pro2=y*(a-1)/a/b
sc=max(sc,pro1*calc(p1,p2+a,use|(1<<i),0) + pro2*calc(p1+b,p2,use|(1<<j),1))
if sc!=-100:
ANS=min(ANS,sc)
return ANS
print(calc(0,0,0,0))
titia