比赛 2025.9.6 评测结果 AAAAAAAAAAAAAAAAAA
题目名称 Sequence Construction 最终得分 100
用户昵称 Hollow07 运行时间 0.169 s
代码语言 C++ 内存使用 3.86 MiB
提交时间 2025-09-06 09:23:31
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
#define ll long long

ll T,m,k;
vector<ll> le;

int main(){
//	freopen("in.in","r",stdin);
	freopen("Sequence.in","r",stdin);
	freopen("Sequence.out","w",stdout);
	scanf("%lld",&T);
	while(T--){
		scanf("%lld %lld",&m,&k);
		le.clear();
		if (__builtin_popcount(m)==k){
			printf("%lld\n%lld\n",1,m);
			continue;
		}
		ll k1=k,tot=1;
		bool check=0;
		while(k1){
			if (k1&1){
				if (tot==1) check=1;
				le.push_back((1<<tot)-1);
			}
			tot<<=1;k1>>=1;
		}
		ll sum=0;
		for (int i=0;i<le.size();i++){
			sum+=le[i];
		}
		sum=m-sum;
		if (sum<0){
			printf("-1\n");
		}else if (sum==0){
			printf("%lld\n",le.size());
			for (int i=0;i<le.size();i++){
				printf("%lld ",le[i]);
			}
			printf("\n");
		}else if(sum==1){
			if (check){
				printf("%lld\n",le.size());
				for (int i=0;i<le.size();i++){
					if (le[i]==1) le[i]=2;
					printf("%lld ",le[i]);
				}
			}else{
				printf("-1\n");
			}
			printf("\n");
		}else if(sum&1){
			le.push_back(1);le.push_back(2);sum-=3;
			le.push_back(sum/2);le.push_back(sum/2);
			printf("%lld\n",le.size());
			for (int i=0;i<le.size();i++){
				printf("%lld ",le[i]);
			}
			printf("\n");
		}else{
			le.push_back(sum/2);le.push_back(sum/2);
			printf("%lld\n",le.size());
			for (int i=0;i<le.size();i++){
				printf("%lld ",le[i]);
			}
			printf("\n");
		}
	}
	return 0;
}