結果

問題 No.1688 Veterinarian
ユーザー nephrologist
提出日時 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
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 14
権限があれば一括ダウンロードができます

ソースコード

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