結果
| 問題 |
No.281 門松と魔法(1)
|
| コンテスト | |
| ユーザー |
yuruhiya
|
| 提出日時 | 2020-10-31 10:46:27 |
| 言語 | Crystal (1.14.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 838 bytes |
| コンパイル時間 | 12,063 ms |
| コンパイル使用メモリ | 296,988 KB |
| 実行使用メモリ | 765,968 KB |
| 最終ジャッジ日時 | 2024-06-30 21:34:26 |
| 合計ジャッジ時間 | 15,158 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 33 WA * 7 RE * 3 MLE * 1 -- * 13 |
ソースコード
lib C
fun strtoll(s : UInt8*, p : UInt8**, b : Int32) : Int64
end
class String
def to_i64
C.strtoll(self, nil, 10)
end
end
# a -> less than b
def calc(a, b, d)
if a < b
0
else
(a - b) // d + 1
end
end
def solve(a, b, c, d)
a, b, c = [a, b, c].map { |i| {i, 0}.max }
if [a, b, c].count { |i| i == 0 } >= 2
Int32::MAX
elsif a == b
{1 + solve(a - d, b, c, d), 1 + solve(a, b - d, c, d)}.min
elsif a == c
{1 + solve(a - d, b, c, d), 1 + solve(a, b, c - d, d)}.min
elsif b == c
{1 + solve(a, b - d, c, d), 1 + solve(a, b, c - d, d)}.min
else
if (b > a && b > c) || (b < a && b < c)
0
else
{calc(a, b, d) + calc(c, b, d), calc(b, {a, c}.min, d)}.min
end
end
end
d, a, b, c = (1..4).map { read_line.to_i }
ans = solve(a, b, c, d)
puts ans < Int32::MAX ? ans : -1
yuruhiya