結果
問題 | No.968 引き算をして門松列(その3) |
ユーザー | norioc |
提出日時 | 2024-08-14 20:39:31 |
言語 | Elixir (1.16.2) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,710 bytes |
コンパイル時間 | 1,206 ms |
コンパイル使用メモリ | 66,792 KB |
実行使用メモリ | 60,196 KB |
最終ジャッジ日時 | 2024-08-14 20:39:46 |
合計ジャッジ時間 | 14,744 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 619 ms
54,964 KB |
testcase_01 | AC | 636 ms
54,180 KB |
testcase_02 | AC | 613 ms
54,336 KB |
testcase_03 | AC | 862 ms
54,644 KB |
testcase_04 | AC | 848 ms
54,860 KB |
testcase_05 | AC | 878 ms
55,232 KB |
testcase_06 | AC | 866 ms
54,940 KB |
testcase_07 | AC | 918 ms
55,408 KB |
testcase_08 | AC | 1,195 ms
58,548 KB |
testcase_09 | WA | - |
testcase_10 | WA | - |
testcase_11 | WA | - |
ソースコード
defmodule Main do def input, do: IO.read(:line) |> String.trim def ii, do: input() |> String.to_integer def li, do: input() |> String.split |> Enum.map(&String.to_integer/1) def yn(b), do: IO.puts(if b, do: "Yes", else: "No") @inf 10 ** 14 def main do t = ii() for _ <- 1..t do [a, b, c, x, y, z] = li() case kadomatu(a, b, c) do [] -> -1 res -> res |> Enum.map(fn {a1, b1, c1} -> cost(a, b, c, a1, b1, c1, x, y, z) end) |> Enum.min end |> then(fn x -> if x >= @inf, do: -1, else: x end) end |> Enum.join("\n") |> IO.puts end # {a, b, c} -> {a1, b1, c1} にするコスト # a <= a1, b <= b1, c <= c1 def cost(a, b, c, a1, b1, c1, x, y, z) do co_a = (a1 - a) * y co_b = (b1 - b) * z co_c = (c1 - c) * x da = (b1 - b) + (c1 - c) db = (a1 - a) + (c1 - c) dc = (a1 - a) + (b1 - b) cond do is_kadomatu(a - da, b - db, c - dc) -> co_a + co_b + co_c true -> @inf end end def kadomatu(a, b, c) do for {a, b, c} <- [{b, a, c}, {b, c, a}, {a, c, b}, {c, a, b}] do f(a, b, c) end |> List.flatten |> Enum.uniq |> Enum.filter(fn {x, y, z} -> x >= a and y >= b and z >= c end) end # a < b < c となるように b, c に加算 def f(a, b, c) do cond do a >= b -> f(a, a+1, c) b >= c -> f(a, b, b+1) true -> [{a, c, b}, {b, c, a}, {b, a, c}, {c, a, b}] end end def is_kadomatu(a, b, c) do cond do a <= 0 or b <= 0 or c <= 0 -> false a == b or b == c or c == a -> false true -> [_, x, _] = Enum.sort([a, b, c]) b != x end end end