結果
問題 | 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 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 37 ms
52,096 KB |
testcase_01 | AC | 37 ms
52,736 KB |
testcase_02 | AC | 771 ms
100,864 KB |
testcase_03 | AC | 754 ms
100,736 KB |
testcase_04 | AC | 750 ms
101,180 KB |
testcase_05 | AC | 763 ms
101,004 KB |
testcase_06 | AC | 773 ms
100,992 KB |
testcase_07 | AC | 754 ms
100,864 KB |
testcase_08 | AC | 760 ms
101,120 KB |
testcase_09 | AC | 775 ms
100,632 KB |
testcase_10 | AC | 36 ms
52,096 KB |
testcase_11 | AC | 37 ms
52,352 KB |
ソースコード
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)