結果

問題 No.281 門松と魔法(1)
コンテスト
ユーザー ゴリポン先生
提出日時 2026-07-04 16:58:28
言語 D
(dmd 2.112.0)
コンパイル:
dmd -fPIE -m64 -w -wi -O -release -inline -I/opt/dmd/src/druntime/import/ -I/opt/dmd/src/phobos -L-L/opt/dmd/linux/lib64/ -fPIC _filename_
実行:
./Main
結果
WA  
実行時間 -
コード長 1,446 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 3,935 ms
コンパイル使用メモリ 172,372 KB
実行使用メモリ 12,024 KB
最終ジャッジ日時 2026-07-04 16:58:35
合計ジャッジ時間 5,053 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 47 WA * 10
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

module main;
// https://mayokoex.hatenablog.com/entry/2015/09/22/225157 より
import std;

void main()
{
	// 入力
	int d = readln.chomp.to!int;
	auto H = new int[](3);
	foreach (ref h; H)
		h = readln.chomp.to!int;
	// 答えの計算と出力
	if (d == 0) {
		bool ok = false;
		if (H[0] > H[1] && H[1] < H[2] && H[0] != H[2])
			ok = true;
		if (H[0] < H[1] && H[1] > H[2] && H[0] != H[2])
			ok = true;
		writeln(ok ? 0 : -1);
		return;
	}
	immutable INF = 10 ^^ 9;
	int ans = INF;
	// 真ん中が一番低い
	{
		int sum = 0;
		auto nH = H.dup;
		if (H[0] == H[2]) {
			nH[0] = max(0, nH[0] - d);
			sum++;
		}
		if (nH[0] > nH[2]) swap(nH[0], nH[2]);
		if (nH[0] != 0) {
			int diff = nH[1] - nH[0];
			if (diff >= 0) {
				int num = diff / d;
				nH[1] -= d * num;
				if (nH[1] >= nH[0])
					num++;
				sum += num;
			}
			ans = min(ans, sum);
		}
	}
	// 真ん中が一番高い
	{
		int sum = 0;
		auto nH = H.dup;
		{
			int diff = nH[0] - nH[1];
			if (diff >= 0) {
				int num = diff / d;
				nH[0] -= d * num;
				if (nH[0] >= nH[1]) {
					nH[0] = max(0, nH[0] - d);
					num++;
				}
				sum += num;
			}
		}
		{
			int diff = nH[2] - nH[1];
			if (diff >= 0) {
				int num = diff / d;
				nH[2] -= d * num;
				if (nH[2] >= nH[1]) {
					nH[2] = max(0, nH[2] - d);
					num++;
				}
				sum += num;
			}
		}
		if (nH[0] == nH[2] && nH[0] != 0)
			sum++;
		ans = min(ans, sum);
	}
	if (ans == INF) ans = -1;
	writeln(ans);
}
0