結果
| 問題 | No.198 キャンディー・ボックス2 |
| コンテスト | |
| ユーザー |
femto
|
| 提出日時 | 2015-12-20 00:31:21 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 1,000 ms |
| コード長 | 931 bytes |
| コンパイル時間 | 608 ms |
| コンパイル使用メモリ | 73,100 KB |
| 実行使用メモリ | 7,720 KB |
| 最終ジャッジ日時 | 2025-11-26 11:38:55 |
| 合計ジャッジ時間 | 1,680 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 27 |
ソースコード
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll INF = (ll)1e12;
int b, n;
vector<ll> c;
ll check(ll t) {
ll sum = b;
ll cost = 0;
for(int i = 0; i < n; i++) {
if(c[i] > t) {
sum += c[i] - t;
cost += c[i] - t;
}
else {
sum -= t - c[i];
cost += t - c[i];
if(sum < 0) {
return INF;
}
}
}
return cost;
}
int main() {
cin >> b >> n;
for(int i = 0; i < n; i++) {
ll cc;
cin >> cc;
c.push_back(cc);
}
sort(c.begin(), c.end());
reverse(c.begin(), c.end());
ll l1 = 0, l2 = l1, r1 = (ll)1e9 + 3, r2 = r1;
while(r1 - l1 > 2) {
l2 = l1 + (r1 - l1) / 3, r2 = l1 + (r1 - l1) * 2 / 3;
ll lc = check(l2), rc = check(r2);
if(lc <= rc) {
r1 = r2;
}
else {
l1 = l2;
}
}
ll ans = check(l1);
ans = min(ans, check(l2));
ans = min(ans, check(r1));
ans = min(ans, check(r2));
cout << ans << endl;
}
femto