結果

問題 No.1688 Veterinarian
ユーザー nephrologistnephrologist
提出日時 2021-09-25 12:31:23
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 1,135 ms / 3,000 ms
コード長 765 bytes
コンパイル時間 152 ms
コンパイル使用メモリ 81,792 KB
実行使用メモリ 279,756 KB
最終ジャッジ日時 2024-07-05 12:03:57
合計ジャッジ時間 4,897 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 43 ms
56,184 KB
testcase_01 AC 51 ms
62,188 KB
testcase_02 AC 81 ms
77,096 KB
testcase_03 AC 44 ms
54,780 KB
testcase_04 AC 42 ms
55,528 KB
testcase_05 AC 43 ms
55,596 KB
testcase_06 AC 209 ms
102,412 KB
testcase_07 AC 41 ms
55,032 KB
testcase_08 AC 654 ms
182,116 KB
testcase_09 AC 730 ms
196,248 KB
testcase_10 AC 379 ms
132,096 KB
testcase_11 AC 174 ms
88,996 KB
testcase_12 AC 42 ms
55,696 KB
testcase_13 AC 204 ms
94,136 KB
testcase_14 AC 53 ms
65,148 KB
testcase_15 AC 1,135 ms
279,756 KB
testcase_16 AC 57 ms
69,676 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

from functools import lru_cache

a, b, c, n = map(int, input().split())


def probability(a, goukei):
    return (a * (a - 1)) / (goukei * (goukei - 1))


@lru_cache(None)
def calc(a, b, c, n):
    goukei = a + b + c
    if goukei <= 1:
        return 0
    if a == 0:
        return 0
    if (b + c) == 0:
        return 1

    if n == 1:
        return probability(a, goukei)

    proba = probability(a, goukei)
    probb = probability(b, goukei)
    probc = probability(c, goukei)
    return (
        proba * (1 + calc(a - 1, b, c, n - 1))
        + probb * (calc(a, b - 1, c, n - 1))
        + probc * (calc(a, b, c - 1, n - 1))
        + (1 - proba - probb - probc) * (calc(a, b, c, n - 1))
    )


print(calc(a, b, c, n), calc(b, c, a, n), calc(c, a, b, n))
0