結果
問題 | No.15 カタログショッピング |
ユーザー | hana314 |
提出日時 | 2019-02-11 15:36:51 |
言語 | C++11 (gcc 11.4.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 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 104 ms
10,840 KB |
testcase_06 | AC | 106 ms
10,840 KB |
testcase_07 | AC | 108 ms
10,844 KB |
testcase_08 | AC | 105 ms
10,840 KB |
testcase_09 | AC | 106 ms
10,844 KB |
ソースコード
#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; }