結果
| 問題 |
No.15 カタログショッピング
|
| コンテスト | |
| ユーザー |
momoyuu
|
| 提出日時 | 2023-03-16 16:11:27 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 23 ms / 5,000 ms |
| コード長 | 1,623 bytes |
| コンパイル時間 | 3,471 ms |
| コンパイル使用メモリ | 269,852 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-09-18 09:23:53 |
| 合計ジャッジ時間 | 4,235 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
int n;
cin >> n;
ll s;
cin>>s;
int m = n / 2;
int mm = n - m;
vector<ll> a(m),b(mm);
for(int i = 0;i<m;i++) cin>>a[i];
for(int i = 0;i<mm;i++) cin>>b[i];
vector<pair<ll,ll> > d;
for(int i = 0;i<1<<mm;i++){
ll sum = 0;
for(int j = 0;j<mm;j++){
if(i>>j&1) sum += b[j];
}
d.push_back(make_pair(sum,i));
//cout<<sum<<" "<<i<<endl;
}
vector<vector<ll> > ans;
vector<pair<ll,ll> > ss;
sort(d.begin(),d.end());
for(int i = 0;i<1<<m;i++){
ll sum = 0;
for(int j = 0;j<m;j++){
if(i>>j&1) sum += a[j];
}
ll want = s - sum;
int ni = lower_bound(d.begin(),d.end(),make_pair(want,-1LL)) - d.begin();
int nj = upper_bound(d.begin(),d.end(),make_pair(want,(ll)1e9)) - d.begin();
//cout<<sum<<" "<<ni<<" "<<nj<<endl;
for(int j = ni;j<nj;j++) ss.push_back(make_pair(i,d[j].second));
}
for(int i = 0;i<ss.size();i++){
vector<ll> now;
int ni = ss[i].first;
int nj = ss[i].second;
//cout<<ni<<" "<<nj<<endl;
for(int j = 0;j<m;j++){
if(ni>>j&1) now.push_back(j+1);
}
for(int j = 0;j<mm;j++){
if(nj>>j&1) now.push_back(m+j+1);
}
ans.push_back(now);
}
sort(ans.begin(),ans.end());
for(int i = 0;i<ans.size();i++){
for(int j = 0;j<ans[i].size();j++){
if(j!=0) cout<<" ";
cout<<ans[i][j];
}
cout<<endl;
}
}
momoyuu