結果
| 問題 |
No.15 カタログショッピング
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-07-01 14:56:09 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 20 ms / 5,000 ms |
| コード長 | 1,401 bytes |
| コンパイル時間 | 821 ms |
| コンパイル使用メモリ | 79,220 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-10-05 03:41:53 |
| 合計ジャッジ時間 | 1,477 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:7:18: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
7 | int N, S; scanf("%d%d", &N, &S);
| ~~~~~^~~~~~~~~~~~~~~~
main.cpp:9:33: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
9 | for(int i=0; i<N; ++i) { scanf("%d", &P[i]); }
| ~~~~~^~~~~~~~~~~~~
ソースコード
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(void) {
int N, S; scanf("%d%d", &N, &S);
vector<int> P(N); // P[N]
for(int i=0; i<N; ++i) { scanf("%d", &P[i]); }
// 前半 n 個、後半 m 個の 全 N 個
int n = N / 2;
int m = N - n;
vector<pair<int, int>> memo;
for(int mask=0; mask<1<<m; ++mask) {
int acc = 0;
for(int i=0; i<m; ++i) {
if(mask >> i & 1) { acc += P[i+n]; }
}
memo.emplace_back(acc, mask);
}
sort(begin(memo), end(memo));
int M = memo.size();
vector<vector<int>> res;
for(int mask=0; mask<1<<n; ++mask) {
int acc = S;
vector<int> v;
for(int i=0; i<n; ++i) {
if(mask >> i & 1) {
v.push_back(i);
acc -= P[i];
}
}
int lo = 0, hi = M; // [lo, hi)
while(hi - lo > 1) {
int md = (lo + hi) / 2;
(memo[md].first < acc ? lo : hi) = md;
}
for(int x=lo; x<M; ++x) {
if(memo[x].first > acc) { break; }
if(memo[x].first < acc) { continue; }
vector<int> w = v;
int S = memo[x].second;
for(int i=0; i<m; ++i) {
if(S >> i & 1) { w.push_back(i+n); }
}
res.push_back(w);
}
}
sort(begin(res), end(res));
for(vector<int> row : res) {
for(int i=0, z=row.size(); i<z; ++i) {
if(i) { putchar(' '); }
printf("%d", row[i]+1);
}
putchar('\n');
}
return 0;
}