結果
問題 |
No.281 門松と魔法(1)
|
ユーザー |
|
提出日時 | 2016-07-17 06:11:38 |
言語 | Nim (2.2.0) |
結果 |
AC
|
実行時間 | 3 ms / 1,000 ms |
コード長 | 1,035 bytes |
コンパイル時間 | 2,586 ms |
コンパイル使用メモリ | 65,112 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-29 14:07:55 |
合計ジャッジ時間 | 4,072 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 57 |
ソースコード
import strutils const INF = int(1e9) + 100 var d = stdin.readLine.parseInt h1 = stdin.readLine.parseInt h2 = stdin.readLine.parseInt h3 = stdin.readLine.parseInt proc bye(x: int) = echo(x); quit 0 proc ok(x, y, z: int): bool = var ok1 = x > y and y < z ok2 = x < y and y > z result = x != z and (ok1 or ok2) proc count(my, your, d: int): int = if your == 0: return INF if my < your: return 0 result = (my - your + d) div d proc cut(my, d, times: int): int = result = max(0, my-d*times) if ok(h1, h2, h3): bye(0) if d == 0: bye(-1) var x, y, z, p, q: int var r1 = 0 x = h1 y = h2 z = h3 if x == z: x = cut(x, d, 1) r1 += 1 p = count(x, y, d) r1 += p x = cut(x, d, p) q = count(z, y, d) r1 += q z = cut(z, d, q) if not ok(x, y, z): r1 = INF var r2 = 0 x = h1 y = h2 z = h3 if x == z: x = cut(x, d, 1) r2 += 1 p = count(y, x, d) r2 += p y = cut(y, d, p) q = count(y, z, d) r2 += q y = cut(y, d, q) if not ok(x, y, z): r2 = INF var res = min(r1, r2) if res >= INF: res = -1 echo res