結果
| 問題 |
No.15 カタログショッピング
|
| コンテスト | |
| ユーザー |
yaoshimax
|
| 提出日時 | 2015-02-10 18:11:50 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,037 bytes |
| コンパイル時間 | 1,414 ms |
| コンパイル使用メモリ | 108,484 KB |
| 実行使用メモリ | 10,844 KB |
| 最終ジャッジ日時 | 2024-06-23 18:17:38 |
| 合計ジャッジ時間 | 2,123 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 8 WA * 2 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:24:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
24 | scanf("%d%d",&N,&S);
| ~~~~~^~~~~~~~~~~~~~
main.cpp:26:36: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
26 | for( int i = 0 ; i <N; i++) scanf("%d", &P[i]);
| ~~~~~^~~~~~~~~~~~~
ソースコード
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cfloat>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
#include <cstring>
using namespace std;
int main(){
int N,S;
scanf("%d%d",&N,&S);
int P[N];
for( int i = 0 ; i <N; i++) scanf("%d", &P[i]);
vector< pair<int,vector<int> > > p1;
vector< pair<int,vector<int> > > p2;
for( int i = 0 ; i < (1<<(N/2)); i++ ){
vector<int> v;
int sum =0;
for( int j = 0 ; j < (N/2); j++){
if( (i&(1<<j))!=0 ){
v.push_back(j);
sum+=P[j];
}
}
p1.push_back(make_pair(sum,v));
}
for( int i = 0 ; i < (1<<(N-N/2)) ; i++ ){
vector<int> v;
int sum =0;
for( int j = 0 ; j < (N-N/2); j++){
if( (i&(1<<j))!=0 ){
v.push_back(N/2+j);
sum+=P[N/2+j];
}
}
p2.push_back(make_pair(sum,v));
}
sort( p2.begin(),p2.end());
vector< vector<int> > ans;
for( int i = 0 ; i <(int) p1.size(); i++ ){
int cost = p1[i].first;
if( S-cost < 0 ) return 0;
int left = 0;
int right = p2.size();
while( left < right ){
int mid = (left+right)/2;
if( p2[mid].first < S-cost ){
left=mid+1;
}
else{
right=mid;
}
}
//cout << cost << ", "<< left <<endl;
while( left<(int)p2.size() && p2[left].first==S-cost){
vector<int> ansvec;
for(int j = 0 ; j < (int)p1[i].second.size(); j++ ){
ansvec.push_back(p1[i].second[j]);
}
for(int j = 0 ; j < (int)p2[left].second.size(); j++ ){
ansvec.push_back(p2[left].second[j]);
}
ans.push_back(ansvec);
left++;
}
}
sort(ans.begin(),ans.end());
for( int i = 0 ; i < (int)ans.size(); i++){
for( int j = 0 ; j < (int)ans[i].size(); j++ ){
cout << 1+ans[i][j]<<" ";
}
cout << endl;
}
return 0;
}
yaoshimax