結果

問題 No.1688 Veterinarian
ユーザー 👑 obakyan
提出日時 2022-03-21 21:25:33
言語 Lua
(LuaJit 2.1.1734355927)
結果
AC  
実行時間 302 ms / 3,000 ms
コード長 1,472 bytes
コンパイル時間 120 ms
コンパイル使用メモリ 5,248 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-10-09 12:14:29
合計ジャッジ時間 3,211 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 14
権限があれば一括ダウンロードができます

ソースコード

diff #

local mfl, mce = math.floor, math.ceil
local function encode(a, b, c)
  return a + (b - 1) * 50 + (c - 1) * 2500
end
local function decode(idx)
  local c = mce(idx / 2500)
  idx = idx - (c - 1) * 2500
  local b = mce(idx / 50)
  local a = idx - (b - 1) * 50
  return a, b, c
end

local tot = encode(50, 50, 50)
local fa, fb, fc, n = io.read("*n", "*n", "*n", "*n")
local dp1, dp2 = {}, {}
for i = 1, tot do
  dp1[i] = 0
end
dp1[encode(fa, fb, fc)] = 1
for i = 1, n do
  local src = i % 2 == 1 and dp1 or dp2
  local dst = i % 2 == 1 and dp2 or dp1
  for j = 1, tot do
    dst[j] = 0
  end
  for j = 1, tot do
    local a, b, c = decode(j)
    local rate = 0
    local sum = a + b + c
    if 1 < a then
      local z = a * (a - 1) / sum / (sum - 1)
      rate = rate + z
      local d = encode(a - 1, b, c)
      dst[d] = dst[d] + src[j] * z
    end
    if 1 < b then
      local z = b * (b - 1) / sum / (sum - 1)
      rate = rate + z
      local d = encode(a, b - 1, c)
      dst[d] = dst[d] + src[j] * z
    end
    if 1 < c then
      local z = c * (c - 1) / sum / (sum - 1)
      rate = rate + z
      local d = encode(a, b, c - 1)
      dst[d] = dst[d] + src[j] * z
    end
    dst[j] = dst[j] + src[j] * (1 - rate)
  end
end
local aa, ab, ac = 0, 0, 0
local tbl = n % 2 == 1 and dp2 or dp1
for i = 1, tot do
  local a, b, c = decode(i)
  aa = aa + (fa - a) * tbl[i]
  ab = ab + (fb - b) * tbl[i]
  ac = ac + (fc - c) * tbl[i]
end
print(aa .. " " .. ab .. " " .. ac)
0