結果
| 問題 |
No.2856 Junk Market Game
|
| コンテスト | |
| ユーザー |
startcpp
|
| 提出日時 | 2024-08-25 14:57:12 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 4 ms / 2,000 ms |
| コード長 | 892 bytes |
| コンパイル時間 | 820 ms |
| コンパイル使用メモリ | 77,788 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-08-25 14:57:15 |
| 合計ジャッジ時間 | 2,353 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 52 |
ソースコード
//一般人が購入したアイテムの番号集合をSとすると、
//sum(A, S) - sum(B, all - S)
//= sum(A, S) - sum(B, all) + sum(B, S) = -sumB + sum(A + B, S)
//と変形できるので、一般人は A + Bが小さい方から取ればいい。
//MMA部員は小さいのを先に取れなくしたいので A + B が小さい方から取ればOK。
//結局、交互に取る形になる。
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#define rep(i, n) for(i = 0; i < n; i++)
#define int long long
using namespace std;
int n;
int a[2000];
int b[2000];
signed main() {
int i;
cin >> n;
rep(i, 2 * n) cin >> a[i];
rep(i, 2 * n) cin >> b[i];
vector<int> vec;
rep(i, 2 * n) vec.push_back(a[i] + b[i]);
sort(vec.begin(), vec.end());
int ans = 0;
rep(i, 2 * n) ans -= b[i];
rep(i, n) ans += vec[i * 2];
cout << ans << endl;
return 0;
}
startcpp