結果
問題 | No.968 引き算をして門松列(その3) |
ユーザー | norioc |
提出日時 | 2024-08-14 20:40:54 |
言語 | Elixir (1.16.2) |
結果 |
AC
|
実行時間 | 1,383 ms / 2,000 ms |
コード長 | 1,710 bytes |
コンパイル時間 | 1,768 ms |
コンパイル使用メモリ | 62,340 KB |
実行使用メモリ | 57,936 KB |
最終ジャッジ日時 | 2024-08-14 20:41:08 |
合計ジャッジ時間 | 13,859 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 559 ms
54,188 KB |
testcase_01 | AC | 546 ms
54,672 KB |
testcase_02 | AC | 546 ms
54,144 KB |
testcase_03 | AC | 791 ms
54,956 KB |
testcase_04 | AC | 777 ms
54,968 KB |
testcase_05 | AC | 762 ms
54,836 KB |
testcase_06 | AC | 795 ms
54,640 KB |
testcase_07 | AC | 842 ms
54,760 KB |
testcase_08 | AC | 1,186 ms
56,352 KB |
testcase_09 | AC | 1,206 ms
57,936 KB |
testcase_10 | AC | 1,383 ms
56,856 KB |
testcase_11 | AC | 1,318 ms
56,904 KB |
ソースコード
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 ** 18 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