結果

問題 No.281 門松と魔法(1)
ユーザー masa
提出日時 2015-09-18 23:30:13
言語 C++11(廃止可能性あり)
(gcc 13.3.0)
結果
RE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,190 bytes
コンパイル時間 447 ms
コンパイル使用メモリ 58,972 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-11-06 19:28:46
合計ジャッジ時間 2,104 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 55 RE * 2
権限があれば一括ダウンロードができます

ソースコード

diff #

#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 ans1 = calc_h2max();
	int ans2 = calc_h2min();

	int ans;

	if (ans1 == -1) {
		ans = ans2;
	} else if (ans2 == -1) {
		ans = ans1;
	} else {
		ans = min(ans1, ans2);
	}

	cout << ans << endl;
	return 0;
}
0