結果
| 問題 | No.174 カードゲーム(Hard) |
| コンテスト | |
| ユーザー |
convexineq
|
| 提出日時 | 2020-12-15 20:25:51 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 481 ms / 2,000 ms |
| コード長 | 1,112 bytes |
| 記録 | |
| コンパイル時間 | 298 ms |
| コンパイル使用メモリ | 85,580 KB |
| 実行使用メモリ | 106,008 KB |
| 最終ジャッジ日時 | 2026-04-08 14:35:24 |
| 合計ジャッジ時間 | 5,256 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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