結果
| 問題 |
No.198 キャンディー・ボックス2
|
| コンテスト | |
| ユーザー |
airis
|
| 提出日時 | 2015-05-09 20:05:08 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 1,000 ms |
| コード長 | 1,245 bytes |
| コンパイル時間 | 585 ms |
| コンパイル使用メモリ | 72,784 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-11-16 09:03:24 |
| 合計ジャッジ時間 | 1,523 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 26 |
ソースコード
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <numeric>
#define rep(x, to) for (int x = 0; x < (to); x++)
#define REP(x, a, to) for (int x = (a); x < (to); x++)
#define foreach(itr, x) for (typeof((x).begin()) itr = (x).begin(); itr != (x).end(); itr++)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<long, long> PLL;
ll B, N;
ll c[15];
ll mx; //均一化できる最大数
const ll INF = (ll)(1e+18 + 7);
ll f(ll x) {
ll cost = 0;
//箱のキャンディをx個にするときの作業数
rep(i, N) {
cost += abs(c[i] - x);
}
return cost;
}
void solve() {
ll left = 0;
ll right = mx;
while (right - left > 2) {
ll a = (2 * left + right) / 3;
ll b = (left + 2 * right) / 3;
if (f(a) < f(b)) {
right = b;
} else {
left = a;
}
//printf("f(%lld)=%lld f(%lld)=%lld\n", left, f(left), right, f(right));
}
cout << min(f(left), min(f(left+1), f(right))) << endl;
}
int main() {
cin >> B;
cin >> N;
rep(i, N) {
cin >> c[i];
}
rep(i, N) mx += c[i];
mx += B;
mx /= N;
solve();
return 0;
}
airis