結果
問題 |
No.15 カタログショッピング
|
ユーザー |
|
提出日時 | 2019-02-11 15:36:51 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 108 ms / 5,000 ms |
コード長 | 2,050 bytes |
コンパイル時間 | 1,619 ms |
コンパイル使用メモリ | 106,896 KB |
実行使用メモリ | 10,844 KB |
最終ジャッジ日時 | 2024-07-18 11:19:50 |
合計ジャッジ時間 | 2,327 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 10 |
ソースコード
#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 += i+1; } 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){ for(auto j:i){ int temp=j; cout << temp <<" "; }cout<<endl; } return 0; }