結果
| 問題 |
No.545 ママの大事な二人の子供
|
| コンテスト | |
| ユーザー |
settsud
|
| 提出日時 | 2017-07-14 23:17:13 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 56 ms / 2,000 ms |
| コード長 | 1,007 bytes |
| コンパイル時間 | 1,539 ms |
| コンパイル使用メモリ | 168,552 KB |
| 実行使用メモリ | 9,600 KB |
| 最終ジャッジ日時 | 2024-10-07 23:52:47 |
| 合計ジャッジ時間 | 2,930 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 |
ソースコード
#include "bits/stdc++.h"
using namespace std;
set<long long int >get_all(vector<pair<long long int,long long int>>v) {
set<long long int>aset;
for (int i = 0; i < (1 << v.size()); ++i) {
bitset<20>bs(i);
long long int sum = 0;
for (int j = 0; j < v.size(); ++j) {
if (bs[j])sum += v[j].first;
else sum -= v[j].second;
}
aset.emplace(sum);
}
return aset;
}
int main() {
int N; cin >> N;
vector<pair<long long int,long long int>>ds;
for (int i = 0; i < N; ++i) {
long long int a, b; cin >> a >> b;
ds.emplace_back(a, b);
}
auto aset(get_all(vector<pair<long long int, long long int>>(ds.begin(), ds.begin() + N / 2)));
auto bset(get_all(vector<pair<long long int, long long int>>(ds.begin() + N / 2, ds.end())));
long long int ans = 1e18;
for (auto as : aset) {
auto it = bset.lower_bound(-as);
if (it != bset.end()) {
ans = min(ans, abs(*it+ as));
}
if (it != bset.begin()) {
ans = min(ans, abs(*(prev(it))+ as));
}
}
cout << ans << endl;
return 0;
}
settsud