結果
| 問題 |
No.15 カタログショッピング
|
| コンテスト | |
| ユーザー |
siman
|
| 提出日時 | 2022-04-10 04:04:49 |
| 言語 | C++17(clang) (17.0.6 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,874 bytes |
| コンパイル時間 | 4,130 ms |
| コンパイル使用メモリ | 146,176 KB |
| 実行使用メモリ | 18,560 KB |
| 最終ジャッジ日時 | 2024-11-30 08:33:15 |
| 合計ジャッジ時間 | 5,183 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 5 WA * 5 |
ソースコード
#include <cassert>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <climits>
#include <map>
#include <queue>
#include <set>
#include <cstring>
#include <vector>
using namespace std;
typedef long long ll;
ll N, S;
map<ll, vector<vector<int>>> memo_1;
map<ll, vector<vector<int>>> memo_2;
void dfs(int i, ll sum, int end, vector<ll> &values, vector<int> &goods) {
if (i == end) {
if (end < N) {
memo_1[sum].push_back(goods);
} else {
memo_2[sum].push_back(goods);
}
} else {
goods.push_back(i + 1);
dfs(i + 1, sum + values[i], end, values, goods);
goods.pop_back();
dfs(i + 1, sum, end, values, goods);
}
}
int main() {
cin >> N >> S;
vector<ll> values(N);
for (int i = 0; i < N; ++i) {
cin >> values[i];
}
int mid = N / 2;
vector<int> goods;
dfs(0, 0, mid, values, goods);
dfs(mid, 0, N, values, goods);
for (auto &[v, goods_list] : memo_1) {
if (v != S) continue;
for (auto &goods : goods_list) {
for (int g : goods) {
cout << g;
if (g != goods.back()) cout << " ";
}
cout << endl;
}
}
for (auto &[v, goods_list] : memo_1) {
ll r = S - v;
if (not memo_2.count(r)) continue;
if (v == 0) continue;
if (r == 0) continue;
for (auto &goods1 : goods_list) {
for (auto &goods2 : memo_2[r]) {
vector<int> ans = goods1;
for (int g : goods2) {
ans.push_back(g);
}
for (int g : ans) {
cout << g;
if (g != ans.back()) cout << " ";
}
cout << endl;
}
}
}
for (auto &[v, goods_list] : memo_2) {
if (v != S) continue;
for (auto &goods : goods_list) {
for (int g : goods) {
cout << g;
if (g != goods.back()) cout << " ";
}
cout << endl;
}
}
return 0;
}
siman