比赛 |
20130923 |
评测结果 |
WAAWWWWWWW |
题目名称 |
鬼谷子的钱袋 |
最终得分 |
20 |
用户昵称 |
落尘 |
运行时间 |
0.002 s |
代码语言 |
C++ |
内存使用 |
0.31 MiB |
提交时间 |
2015-10-12 20:25:41 |
显示代码纯文本
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#include <map>
using namespace std;
long long int M;
map<int,bool> P;
map<int,bool>::iterator pos;
int main(){
freopen("wallet.in","r",stdin);
freopen("wallet.out","w",stdout);
scanf("%lld",&M);
for(int i(0);i<=31;++i){
long long int op=1;
op<<=i;
if(op<=M) M-=op,P[op]=true;
}
if(M==1){
printf("%d\n1",P.size()+1);
for(pos=P.begin();pos!=P.end();++pos){
if((*pos).second){
printf(" %d",*pos);
}
}
}else if(M==2){
P[2]=false;
P[3]=true;
printf("%d\n1",P.size());
for(pos=P.begin();pos!=P.end();++pos){
if((*pos).second){
printf(" %d",*pos);
}
}
}else{
if(!P[M]) P[M]=true;
else{
P[M+1]=true;
P[M-1]=true;
P[M]=false;
}
printf("%d",P.size());
for(pos=P.begin();pos!=P.end();++pos){
if((*pos).second){
putchar(pos==P.begin()?'\n':' ');
printf("%d",*pos);
}
}
}
fclose(stdin);
fclose(stdout);
return 0;
}