結果
| 問題 |
No.281 門松と魔法(1)
|
| コンテスト | |
| ユーザー |
yuruhiya
|
| 提出日時 | 2020-10-31 11:33:25 |
| 言語 | Crystal (1.14.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 901 bytes |
| コンパイル時間 | 12,050 ms |
| コンパイル使用メモリ | 296,908 KB |
| 実行使用メモリ | 749,748 KB |
| 最終ジャッジ日時 | 2024-06-30 21:34:49 |
| 合計ジャッジ時間 | 15,395 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 39 WA * 3 RE * 1 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
INF = 10i64 ** 9
# a -> less than b
def calc(a, b, d)
if a < b
0i64
else
res = (a - b) // d + 1
{a - res*d, 0i64}.max < b ? res : INF
end
end
def solve(a, b, c, d)
a, b, c = [a, b, c].map { |i| {i, 0i64}.max }
if [a, b, c].count { |i| i == 0 } >= 2
INF
elsif a == b
{solve(a - d, b, c, d) + 1, solve(a, b - d, c, d) + 1}.min
elsif a == c
{solve(a - d, b, c, d) + 1, solve(a, b, c - d, d) + 1}.min
elsif b == c
{solve(a, b - d, c, d) + 1, solve(a, b, c - d, d) + 1}.min
else
if (b > a && b > c) || (b < a && b < c)
0i64
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_i64 }
ans = solve(a, b, c, d)
puts ans < INF ? ans : -1
yuruhiya