結果
| 問題 | No.15 カタログショッピング | 
| コンテスト | |
| ユーザー |  nanasili | 
| 提出日時 | 2014-11-01 23:13:56 | 
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) | 
| 結果 | 
                                RE
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,856 bytes | 
| コンパイル時間 | 1,243 ms | 
| コンパイル使用メモリ | 99,828 KB | 
| 実行使用メモリ | 9,728 KB | 
| 最終ジャッジ日時 | 2024-12-30 16:09:27 | 
| 合計ジャッジ時間 | 3,127 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 5 RE * 5 | 
ソースコード
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <map>
#include <set>
#include <algorithm>
#include <functional>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cctype>
#include <string>
#include <cstring>
using namespace std;
typedef long long ll;
int main() {
  ll n, s;
  cin >> n >> s;
  ll p[n];
  for (int i = 0; i < n; i++) cin >> p[i];
  vector <int> a[33000];
  map <ll, vector <int> > memo;
  set <vector <int> > ans;
  for (ll i = 1; i < powl(2, n-(n/2)); i++) {
    ll sum = 0;
    for (ll j = 0, k = i; k != 0; k>>=1, j++) {
      if (k&1) {
        sum += p[j];
        a[i-1].push_back(j+1);
      }
    }
    if (sum == s) {
      vector <int> temp;
      for (int j = 0; j < a[i-1].size(); j++) temp.push_back(a[i-1][j]);
      ans.insert(temp);
    }
    memo[sum].push_back(i-1);
  }
  for (ll i = 1; i < powl(2, n/2); i++) {
    ll sum = 0;
    vector <int> temp;
    for (ll j = n-(n/2), k = i; k != 0; k>>=1, j++) {
      if (k&1) {
        sum += p[j];
        temp.push_back(j+1);
      }
    }
    if (memo.find(s-sum) != memo.end()) {
      for (int j = 0; j < memo[s-sum].size(); j++) {
        vector <int> temp2;
        for (int k = 0; k < a[memo[s-sum][j]].size(); k++) temp2.push_back(a[memo[s-sum][j]][k]);
        for (int k = 0; k < temp.size(); k++) temp2.push_back(temp[k]);
        ans.insert(temp2);
      }
    }else if (sum == s) {
      vector <int> temp2;
      for (int j = 0; j < temp.size(); j++) temp2.push_back(temp[j]);
      ans.insert(temp2);
    }
  }
  for (set <vector <int> >::iterator it = ans.begin(); it != ans.end(); it++) {
    for (int i = 0; i < (*it).size(); i++) {
      cout << (*it)[i] << " ";
    }
    cout << endl;
  }
}
            
            
            
        