結果

問題 No.1688 Veterinarian
コンテスト
ユーザー nephrologist
提出日時 2021-09-25 12:31:23
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
AC  
実行時間 930 ms / 3,000 ms
コード長 765 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 232 ms
コンパイル使用メモリ 85,376 KB
実行使用メモリ 276,040 KB
最終ジャッジ日時 2026-03-26 19:32:56
合計ジャッジ時間 4,390 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge3_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 14
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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