結果
| 問題 |
No.174 カードゲーム(Hard)
|
| コンテスト | |
| ユーザー |
convexineq
|
| 提出日時 | 2020-12-15 20:25:51 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 775 ms / 2,000 ms |
| コード長 | 1,112 bytes |
| コンパイル時間 | 169 ms |
| コンパイル使用メモリ | 82,248 KB |
| 実行使用メモリ | 101,180 KB |
| 最終ジャッジ日時 | 2024-09-20 02:06:49 |
| 合計ジャッジ時間 | 7,129 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 12 |
ソースコード
def get(a,n,p):
res = [[0.0]*n for _ in range(n)]
N = 1<<n
dp = [0.0]*N
dp[0] = 1.0
for mask in range(N-1):
find = 0
s = size[mask]
if s==n-1:
i = ((N-1)^mask).bit_length()-1
res[s][i] += dp[mask]
continue
np = (1-p)/(n-s-1)
for i in range(n):
if mask>>i&1 == 0:
if not find:
find = 1
dp[mask|(1<<i)] += dp[mask]*p
res[s][i] += dp[mask]*p
else:
dp[mask|(1<<i)] += dp[mask]*np
res[s][i] += dp[mask]*np
return res
n,pa,pb = input().split()
n = int(n)
pa,pb = float(pa), float(pb)
*a, = map(int,input().split())
*b, = map(int,input().split())
a.sort()
b.sort()
size = [0]*(1<<n)
for i in range(n):
for j in range(1<<i):
size[j+(1<<i)] = size[j] + 1
ra = get(a,n,pa)
rb = get(b,n,pb)
ans = 0
for s in range(n):
for i,ai in enumerate(a):
for j,bj in enumerate(b):
if ai > bj:
ans += ra[s][i]*rb[s][j]*(ai+bj)
print(ans)
convexineq