結果
| 問題 |
No.1688 Veterinarian
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-20 19:03:07 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 3,153 bytes |
| コンパイル時間 | 169 ms |
| コンパイル使用メモリ | 82,496 KB |
| 実行使用メモリ | 75,160 KB |
| 最終ジャッジ日時 | 2025-03-20 19:03:17 |
| 合計ジャッジ時間 | 1,901 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 4 RE * 10 |
ソースコード
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])
lam6er