結果
| 問題 | No.198 キャンディー・ボックス2 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-02-01 19:24:28 |
| 言語 | D (dmd 2.111.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 1,000 ms |
| コード長 | 803 bytes |
| 記録 | |
| コンパイル時間 | 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 |
ソースコード
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);
}