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