結果
問題 | No.545 ママの大事な二人の子供 |
ユーザー | t-yoshihara |
提出日時 | 2017-07-14 23:35:26 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 22 ms / 2,000 ms |
コード長 | 1,167 bytes |
コンパイル時間 | 1,799 ms |
コンパイル使用メモリ | 164,444 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-07 23:40:15 |
合計ジャッジ時間 | 2,703 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 32 |
ソースコード
#include <bits/stdc++.h> #define REP(i,n) for(int i=0;i<(int)(n);i++) #define ALL(x) (x).begin(),(x).end() #define LL long long using namespace std; int main(){ int n; cin>>n; LL A[n]; LL B[n]; REP(i,n)cin>>A[i]>>B[i]; LL sumA=0; REP(i,n)sumA+=A[i]; REP(i,n)B[i]+=A[i]; vector<LL> vecA; vector<LL> vecB; int half=n/2; REP(i,1<<half){ LL num=0; REP(j,half){ if(i>>j & 1){ num+=B[j]; } } vecA.push_back(num); } REP(i,1<<(n-half)){ LL num=0; REP(j,n-half){ if(i>>j & 1){ num+=B[j+half]; } } vecB.push_back(num); } sort(ALL(vecA)); sort(ALL(vecB)); LL minimum = 10000000000000000L; REP(i,vecA.size()){ LL va = vecA[i]; vector<LL>::iterator itr = lower_bound(vecB.begin(),vecB.end(),sumA-va); if(itr!=vecB.end()){ minimum=min(minimum,abs(sumA-(va + *itr))); } itr--; LL ans2=va+ *itr; minimum = min(minimum,abs(sumA-ans2)); } cout<<minimum<<endl; return 0; }