結果
問題 | No.174 カードゲーム(Hard) |
ユーザー | shotoyoo |
提出日時 | 2021-07-03 21:56:24 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 813 ms / 2,000 ms |
コード長 | 1,257 bytes |
コンパイル時間 | 160 ms |
コンパイル使用メモリ | 81,920 KB |
実行使用メモリ | 109,056 KB |
最終ジャッジ日時 | 2024-06-30 14:02:27 |
合計ジャッジ時間 | 7,550 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 12 |
ソースコード
import sys input = lambda : sys.stdin.readline().rstrip() sys.setrecursionlimit(2*10**5+10) write = lambda x: sys.stdout.write(x+"\n") debug = lambda x: sys.stderr.write(x+"\n") writef = lambda x: print("{:.12f}".format(x)) n,pa,pb = input().split() n = int(n) pa = float(pa) pb = float(pb) A = list(map(int, input().split())) B = list(map(int, input().split())) A.sort() B.sort() proba = [0]*(1<<n) probb = [0]*(1<<n) proba[0] = 1 probb[0] = 1 va = [[0]*n for _ in range(n)] vb = [[0]*n for _ in range(n)] for b in range((1<<n)-1): l = [] for i in range(n): if b>>i&1==0: l.append(i) used = n - len(l) if len(l)==1: psa = [1] psb = [1] else: psa = [pa] + [(1-pa)/(len(l)-1)] * (len(l)-1) psb = [pb] + [(1-pb)/(len(l)-1)] * (len(l)-1) for ind,i in enumerate(l): vva = psa[ind]*proba[b] vvb = psb[ind]*probb[b] proba[b|(1<<i)] += vva probb[b|(1<<i)] += vvb va[used][i] += vva vb[used][i] += vvb ans = 0 for i in range(n): for j in range(n): aa = A[j] pa = va[i][j] for k in range(n): pb = vb[i][k] bb = B[k] if aa>bb: ans += (aa+bb) * pa*pb print(ans)