結果

問題 No.15 カタログショッピング
ユーザー uenokuuenoku
提出日時 2017-02-10 01:38:15
言語 C++14
(gcc 13.2.0 + boost 1.83.0)
結果
AC  
実行時間 1,878 ms / 5,000 ms
コード長 1,941 bytes
コンパイル時間 1,025 ms
コンパイル使用メモリ 93,992 KB
実行使用メモリ 4,736 KB
最終ジャッジ日時 2023-08-26 23:04:54
合計ジャッジ時間 11,571 ms
ジャッジサーバーID
(参考情報)
judge13 / judge12
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
4,380 KB
testcase_01 AC 1 ms
4,376 KB
testcase_02 AC 1 ms
4,376 KB
testcase_03 AC 1 ms
4,376 KB
testcase_04 AC 1 ms
4,380 KB
testcase_05 AC 1,863 ms
4,652 KB
testcase_06 AC 1,872 ms
4,600 KB
testcase_07 AC 1,868 ms
4,736 KB
testcase_08 AC 1,878 ms
4,608 KB
testcase_09 AC 1,872 ms
4,592 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: ラムダ関数内:
main.cpp:87:5: 警告: 制御が非 void 関数の終りに到達しました [-Wreturn-type]
   87 |     };
      |     ^

ソースコード

diff #

#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;
    }
}
0