結果
| 問題 |
No.15 カタログショッピング
|
| コンテスト | |
| ユーザー |
shisyamokongari
|
| 提出日時 | 2016-09-29 17:18:49 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,940 bytes |
| コンパイル時間 | 900 ms |
| コンパイル使用メモリ | 69,684 KB |
| 実行使用メモリ | 9,432 KB |
| 最終ジャッジ日時 | 2024-11-21 10:34:33 |
| 合計ジャッジ時間 | 1,741 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 5 WA * 5 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:127:25: warning: ‘mid’ may be used uninitialized in this function [-Wmaybe-uninitialized]
127 | if(h[mid].P==B) continue;
| ^
ソースコード
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
#define NMAX 40
typedef struct s{
long long P;
bool ok[NMAX];
} S;
int N,B;
long long A[NMAX];
vector<S> l,h;
bool sel[NMAX];
bool search_end;
bool ok[NMAX];
bool operator<(S a,S b){
if(a.P==b.P){
for(int i=0;i<N;i++){
if(a.ok[i]&&!b.ok[i]) return true;
if(!a.ok[i]&&b.ok[i]) return false;
}
return true;
}
return a.P<b.P;
}
void ans_out(){
int cnt=0;
for(int i=0;i<N;i++) if(sel[i]) cnt++;
for(int i=0;i<N;i++){
if(sel[i]){
cout<<A[i];
cnt--;
if(cnt) cout<<" ";
}
}
cout<<endl;
return;
}
void search(int m,int sum,int to,int M){
if(to==m){
if(sum==M) search_end=true;
return;
}
sel[m]=true;
search(m+1,sum+A[m],to,M);
if(search_end) return;
sel[m]=false;
search(m+1,sum,to,M);
return;
}
void all(int m,int sum,int to,int mode){ /*mode 0-l mode1-h*/
if(m==to){
S tmps;
tmps.P=sum;
for(int i=0;i<N;i++){
tmps.ok[i]=ok[i];
}
if(mode==0) l.push_back(tmps);
else h.push_back(tmps);
return;
}
ok[m]=true;
all(m+1,sum+A[m],to,mode);
ok[m]=false;
all(m+1,sum,to,mode);
return;
}
int main(){
cin>>N;
cin>>B;
for(int i=0;i<N;i++){
cin>>A[i];
sel[i]=false;
}
for(int i=0;i<N;i++) ok[i]=false;
all(0,0,N/2,0);
all(N/2,0,N,1);
sort(h.begin(),h.end());
sort(l.begin(),l.end());
for(int i=0;i<l.size();i++){
int prc=0;
if(l[i].P==B){
for(int j=0;j<N;j++){
if(l[i].ok[j]) prc++;
}
for(int j=0;j<N;j++){
if(l[i].ok[j]) {
cout<<j+1;
if(prc==1) cout<<endl;
else cout<<" ";
prc--;
}
}
}
}
for(int i=0;i<l.size();i++){
if(l[i].P==B) continue;
int lef=0;
int rig=h.size()-1;
int mid;
while(lef<=rig){
mid=(lef+rig) / 2;
if(h[mid].P<B-l[i].P){
lef=mid+1;
}
else if(h[mid].P>B-l[i].P){
rig=mid-1;
}
else break;
}
if(h[mid].P==B) continue;
if(h[mid].P==B-l[i].P){
while(mid>=1){
if(h[mid].P==h[mid-1].P) mid--;
else break;
}
int f=true;
while(mid<h.size()){
if(mid!=0){
if(h[mid].P!=h[mid-1].P&&!f) break;
}
f=false;
int prc=0;
for(int j=0;j<N;j++){
if(l[i].ok[j]) prc++;
}
for(int j=0;j<N;j++){
if(h[mid].ok[j]) prc++;
}
for(int j=0;j<N;j++){
if(l[i].ok[j]) {
cout<<j+1;
if(prc==1) cout<<endl;
else cout<<" ";
prc--;
}
}
for(int j=0;j<N;j++){
if(h[mid].ok[j]){
cout<<j+1;
if(prc==1) cout<<endl;
else cout<<" ";
prc--;
}
}
mid++;
}
}
}
for(int i=0;i<h.size();i++){
int prc=0;
if(h[i].P==B){
int prc=0;
for(int j=0;j<N;j++){
if(h[i].ok[j]) prc++;
}
for(int j=0;j<N;j++){
if(h[i].ok[j]) {
cout<<j+1;
if(prc==1) cout<<endl;
else cout<<" ";
prc--;
}
}
}
}
return 0;
}
shisyamokongari