結果

問題 No.1688 Veterinarian
ユーザー rlangevin
提出日時 2023-02-14 22:56:18
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 520 ms / 3,000 ms
コード長 1,253 bytes
コンパイル時間 156 ms
コンパイル使用メモリ 82,192 KB
実行使用メモリ 183,340 KB
最終ジャッジ日時 2024-07-17 10:41:43
合計ジャッジ時間 3,854 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 14
権限があれば一括ダウンロードができます

ソースコード

diff #

def f(a, b, c):
    return a * 52 * 52 + b * 52 + c

A, B, C, N = map(int, input().split())
pre = [0] * (52 * 52 * 52)
pre[0] = 1
for i in range(N):
    dp = [0] * (52 * 52 * 52)
    for a in range(51):
        if A - a < 0:
            continue
        for b in range(51):
            if B - b < 0:
                continue
            for c in range(51):
                if C - c < 0:
                    continue
                all = A - a + B - b + C - c
                if all <= 1:
                    continue
                pa = (A - a) * (A - a - 1) / (all * (all - 1))
                pb = (B - b) * (B - b - 1) / (all * (all - 1))
                pc = (C - c) * (C - c - 1) / (all * (all - 1))
                dp[f(a + 1,b,c)] += pre[f(a,b,c)] * pa
                dp[f(a,b + 1,c)] += pre[f(a,b,c)] * pb
                dp[f(a,b,c + 1)] += pre[f(a,b,c)] * pc
                dp[f(a,b,c)] += pre[f(a,b,c)] * (1 - pa - pb - pc)
                
    dp, pre = pre, dp
    
                    
ansA, ansB, ansC = 0, 0, 0
for a in range(51):
    for b in range(51):
        for c in range(51):
            ansA += pre[f(a,b,c)] * a
            ansB += pre[f(a,b,c)] * b
            ansC += pre[f(a,b,c)] * c
            
print(ansA, ansB, ansC)
0