結果
問題 |
No.15 カタログショッピング
|
ユーザー |
|
提出日時 | 2025-08-23 23:29:15 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 47 ms / 5,000 ms |
コード長 | 948 bytes |
コンパイル時間 | 3,263 ms |
コンパイル使用メモリ | 300,200 KB |
実行使用メモリ | 10,720 KB |
最終ジャッジ日時 | 2025-08-23 23:29:20 |
合計ジャッジ時間 | 4,478 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 10 |
ソースコード
#include <bits/stdc++.h> using namespace std; auto solve(int M) { vector<int> P(M); for(int i = 0; i < M; ++i) cin >> P[i]; vector<pair<int,vector<int>>> res; for(int bit = 0; bit < (1 << M); ++bit) { int cnt = 0; vector<int> v; for(int i = 0; i < M; ++i) if(bit >> i & 1) { cnt += P[i]; v.push_back(i); } res.push_back(make_pair(cnt, v)); } return res; } int main() { int N, S; cin >> N >> S; auto P1 = solve(N / 2), P2 = solve(N - N / 2); sort(P2.begin(), P2.end()); vector<vector<int>> ans; for(auto [s1, v1] : P1) { auto it = lower_bound(P2.begin(), P2.end(), make_pair(S - s1, vector<int>())); while(it != P2.end() and (*it).first == S - s1) { vector<int> res = v1; for(auto x : (*it).second) res.push_back(x + N / 2); ans.push_back(res); advance(it, 1); } } sort(ans.begin(), ans.end()); for(auto v : ans) { for(auto x : v) cout << x + 1 << " "; cout << endl; } return 0; }