結果
| 問題 |
No.15 カタログショッピング
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-02-11 15:28:27 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,995 bytes |
| コンパイル時間 | 1,149 ms |
| コンパイル使用メモリ | 106,788 KB |
| 実行使用メモリ | 10,964 KB |
| 最終ジャッジ日時 | 2024-07-18 11:12:17 |
| 合計ジャッジ時間 | 2,082 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 6 WA * 4 |
ソースコード
#include<stdio.h>
#include<iostream>
#include<iomanip>
#include<math.h>
#include<algorithm>
#include<utility>
#include<queue>
#include<string.h>
#include<string>
#include<set>
#include<functional>
using namespace std;
typedef long long LL;
typedef pair<int, int> P;
typedef queue<P> Q;
int N,S;
int p[10010001];
struct Data{
vector<int> products;
string Nums(){
string s;
for(auto i:products){
s += to_string(i+1);
s+=" ";
}
return s;
}
int sum;
bool operator < (const Data& _data) const{
return sum < _data.sum;
}
};
vector<Data> values1;
vector<Data> values2;
int main(){
cin >> N >> S;
for(int i=0;i<N;i++){
cin >>p[i];
}
for (int i=0;i<pow(2.0,(int)(N/2));i++){
int sum=0;
vector<int> ps;
for(int j=0;j<N/2;j++){
if( (i & (int)round(pow(2.0,j)) ) !=0){
sum+=p[j];
ps.push_back(j);
}
}
if(sum>0){
Data d={ps,sum};
values1.push_back(d);
}
}
for (int i=0;i<pow(2.0,(int)(N/2)+N%2);i++){
int sum=0;
vector<int> ps;
for(int j=N/2;j<N;j++){
if( (i & (int)round(pow(2.0,j-N/2)) ) !=0){
sum+=p[j];
ps.push_back(j);
}
}
if(sum>0){
Data d={ps,sum};
values2.push_back(d);
}
}
Data d={{},0};
values1.push_back(d);
values2.push_back(d);
sort(values1.begin(),values1.end());
auto v2b=values2.begin(),v2e=values2.end();
sort(v2b,v2e);
vector<string> anss;
for(auto i:values1){
i.sum=S-i.sum;
for(auto j=lower_bound(v2b,v2e,i);j<upper_bound(v2b,v2e,i);j++){
string s = i.Nums();
s += j->Nums();
anss.push_back(s);
}
}
sort(anss.begin(),anss.end());
for(auto i:anss){
cout<<i<<endl;
}
return 0;
}