比赛 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;
}