結果
| 問題 | No.15 カタログショッピング |
| コンテスト | |
| ユーザー |
uenoku
|
| 提出日時 | 2017-02-10 01:38:15 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2,236 ms / 5,000 ms |
| コード長 | 1,941 bytes |
| コンパイル時間 | 1,269 ms |
| コンパイル使用メモリ | 96,768 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-12-26 02:45:47 |
| 合計ジャッジ時間 | 13,309 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
コンパイルメッセージ
main.cpp: In lambda function:
main.cpp:87:5: warning: control reaches end of non-void function [-Wreturn-type]
87 | };
| ^
ソースコード
#include <algorithm>
#include <cmath>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <vector>
#define rep(i, n) for (int i = 0; i < (n); i++)
#define rrep(i, n) for (int i = (n)-1; i >= 0; i--)
using namespace std;
using lli = long long int;
struct node {
lli in, p;
};
struct zen {
lli show, p;
};
int main()
{
lli n, s;
cin >> n >> s;
vector<node> p;
vector<node> f, l;
vector<zen> F, L;
rep(i, n)
{
lli v;
cin >> v;
p.push_back(node{i, v});
}
random_shuffle(p.begin(), p.end());
rep(i, n)
{
if (i % 2)
f.push_back(p[i]);
else
l.push_back(p[i]);
}
rep(i, 1 << f.size())
{
lli temp = 0;
lli sum = 0;
rep(j, f.size())
{
if ((i >> j) & 1) {
temp += (1 << f[j].in);
sum += f[j].p;
}
}
F.push_back(zen{temp, sum});
}
rep(i, 1 << l.size())
{
lli temp = 0;
lli sum = 0;
rep(j, l.size())
{
if ((i >> j) & 1) {
temp += (1 << l[j].in);
sum += l[j].p;
}
}
L.push_back(zen{temp, sum});
}
vector<lli> ans;
for (auto j : F)
for (auto i : L) {
if (j.p + i.p == s) {
lli data = j.show + i.show;
ans.push_back(data);
}
}
auto func = [=](lli l, lli r) {
rep(i, n)
{
if (l % 2 != r % 2) {
return l % 2 > r % 2;
} else {
l /= 2;
r /= 2;
}
}
};
sort(ans.begin(), ans.end(), func);
for (auto j : ans) {
rep(i, n)
{
if ((j >> i) & 1) {
cout << i + 1 << ' ';
}
}
cout << endl;
}
}
uenoku