結果

問題 No.198 キャンディー・ボックス2
コンテスト
ユーザー ゴリポン先生
提出日時 2026-02-01 19:24:28
言語 D
(dmd 2.111.0)
結果
AC  
実行時間 2 ms / 1,000 ms
コード長 803 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,844 ms
コンパイル使用メモリ 172,696 KB
実行使用メモリ 7,848 KB
最終ジャッジ日時 2026-02-01 19:24:33
合計ジャッジ時間 3,889 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 27
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

module main;
// https://roiti46.hatenablog.com/entry/2015/04/29/yukicoder_No.198_%E3%82%AD%E3%83%A3%E3%83%B3%E3%83%87%E3%82%A3%E3%83%BC%E3%83%BB%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%EF%BC%92 より
// 三分探索
import std;

void main()
{
	// 入力
	long B = readln.chomp.to!long;
	int N = readln.chomp.to!int;
	auto C = new long[](N);
	foreach (ref c; C)
		c = readln.chomp.to!long;
	// 答えの計算
	long ans = 10L ^^ 18;
	long l = -1, r = 10L ^^ 18;
	while (r - l > 2) {
		long lm = (2 * l + r) / 3, rm = (l + 2 * r) / 3;
		if (C.map!(c => lm - c).sum > B)
			r = lm;
		else if (C.map!(c => rm - c).sum > B)
			r = rm;
		else if (C.map!(c => abs(lm - c)).sum <= C.map!(c => abs(rm - c)).sum)
			r = rm;
		else
			l = lm;
	}
	// 答えの出力
	writeln(C.map!(c => abs((r + l) / 2 - c)).sum);
}
0