結果
問題 | No.968 引き算をして門松列(その3) |
ユーザー |
![]() |
提出日時 | 2024-08-14 19:37:01 |
言語 | Elixir (1.18.1) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,495 bytes |
コンパイル時間 | 2,248 ms |
コンパイル使用メモリ | 62,944 KB |
実行使用メモリ | 57,804 KB |
最終ジャッジ日時 | 2024-08-14 19:37:16 |
合計ジャッジ時間 | 14,430 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | WA * 10 |
ソースコード
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 ** 9 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) * x co_b = (b1 - b) * y co_c = (c1 - c) * z da = (b1 - b) + (c1 - c) db = (a1 - a) + (c1 - c) dc = (a1 - a) + (b1 - b) cond do a - da > 0 and b - db > 0 and c - dc > 0 -> 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 end