結果
| 問題 |
No.281 門松と魔法(1)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-07-19 02:42:11 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 1,000 ms |
| コード長 | 1,426 bytes |
| コンパイル時間 | 688 ms |
| コンパイル使用メモリ | 71,660 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-11-06 20:47:10 |
| 合計ジャッジ時間 | 2,185 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 57 |
ソースコード
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <utility>
#include <string>
using namespace std;
int d, h1, h2, h3;
int calc_h2max() {
int ans = 0;
int a = h1;
int b = h2;
int c = h3;
if (b < 2) {
return -1;
}
int n;
if (b <= a) {
n = (a - b) / d + 1;
a -= n * d;
a = max(a, 0);
ans += n;
}
if (b <= c) {
n = (c - b) / d + 1;
c -= n * d;
c = max(c, 0);
ans += n;
}
if (a != c) {
return ans;
}
if (a == 0) {
return -1;
}
return ans + 1;
}
int calc_h2min() {
int ans = 0;
int a = h1;
int b = h2;
int c = h3;
int n;
int min_ac = min(a, c);
if (min_ac < 1) {
return -1;
}
if (b >= min_ac) {
n = (b - min_ac) / d + 1;
b -= n * d;
b = max(0, b);
ans += n;
}
if (a != c) {
return ans;
}
a = max(0, a - d);
ans++;
if (b < a) {
return ans;
}
b = max(0, b - d);
ans++;
if (b != a) {
return ans;
}
return -1;
}
int main() {
cin >> d >> h1 >> h2 >> h3;
int ans;
if (d == 0) {
if (h1 == h2 || h2 == h3 || h3 == h1) {
ans = -1;
} else {
int mini = min({h1, h2, h3});
int maxi = max({h1, h2, h3});
ans = (mini == h2 || maxi == h2) ? 0 : -1;
}
cout << ans << endl;
return 0;
}
int ans1 = calc_h2max();
int ans2 = calc_h2min();
if (ans1 == -1) {
ans = ans2;
} else if (ans2 == -1) {
ans = ans1;
} else {
ans = min(ans1, ans2);
}
cout << ans << endl;
return 0;
}