結果

問題 No.1688 Veterinarian
ユーザー lam6er
提出日時 2025-03-20 21:20:03
言語 PyPy3
(7.3.15)
結果
RE  
実行時間 -
コード長 3,153 bytes
コンパイル時間 202 ms
コンパイル使用メモリ 82,176 KB
実行使用メモリ 75,604 KB
最終ジャッジ日時 2025-03-20 21:21:13
合計ジャッジ時間 1,887 ms
ジャッジサーバーID
(参考情報)
judge3 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 4 RE * 10
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

A, B, C, N = map(int, input().split())
# Initialize the DP table for k=0 (all zeros)
prev_dp = [[[ (0.0, 0.0, 0.0) for _ in range(C+1)] for __ in range(B+1)] for ___ in range(A+1)]
for step in range(N):
current_dp = [[[0.0 for _ in range(3)] for __ in range(B+1)] for ___ in range(A+1)]
for a in range(A+1):
for b in range(B+1):
for c in range(C+1):
total = a + b + c
if total < 2:
current_dp[a][b][c] = (0.0, 0.0, 0.0)
continue
total_choose = total * (total - 1) // 2
expected_w = 0.0
expected_b = 0.0
expected_cr = 0.0
# Same white
if a >= 2:
pairs = a * (a - 1) // 2
prob = pairs / total_choose
new_a = a - 1
ew, eb, ecr = prev_dp[new_a][b][c]
expected_w += prob * (1.0 + ew)
expected_b += prob * eb
expected_cr += prob * ecr
# Same black
if b >= 2:
pairs = b * (b - 1) // 2
prob = pairs / total_choose
new_b = b - 1
ew, eb, ecr = prev_dp[a][new_b][c]
expected_b += prob * (1.0 + eb)
expected_w += prob * ew
expected_cr += prob * ecr
# Same brown
if c >= 2:
pairs = c * (c - 1) // 2
prob = pairs / total_choose
new_c = c - 1
ew, eb, ecr = prev_dp[a][b][new_c]
expected_cr += prob * (1.0 + ecr)
expected_w += prob * ew
expected_b += prob * eb
# Different pairs
# White and Black
if a > 0 and b > 0:
pairs = a * b
prob = pairs / total_choose
ew, eb, ecr = prev_dp[a][b][c]
expected_w += prob * ew
expected_b += prob * eb
expected_cr += prob * ecr
# White and Brown
if a > 0 and c > 0:
pairs = a * c
prob = pairs / total_choose
ew, eb, ecr = prev_dp[a][b][c]
expected_w += prob * ew
expected_b += prob * eb
expected_cr += prob * ecr
# Black and Brown
if b > 0 and c > 0:
pairs = b * c
prob = pairs / total_choose
ew, eb, ecr = prev_dp[a][b][c]
expected_w += prob * ew
expected_b += prob * eb
expected_cr += prob * ecr
current_dp[a][b][c] = (expected_w, expected_b, expected_cr)
prev_dp = current_dp
final = prev_dp[A][B][C]
print(final[0], final[1], final[2])
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0