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

#define ll long long
#define cpy(a,b) copy(begin(a),end(a),begin(b))
#define ld long double
#define dot(x) fixed<<setprecision(x)
#define foru(a,b,c) for(ll a=b;a<=c;a++)

ll t,n,m,k,num[105],cnt;

int main(){
    freopen("Sequence.in" ,"r",stdin );
    freopen("Sequence.out","w",stdout);
    cin>>t;
    while(t--){
        cin>>m>>k;
        cnt=0;
        bool pd=0;
        for(ll i=5;i>=0;i--){
            if(k&(1<<i)){
                ll t=(1<<(1<<i))-1;
                m-=t;
                num[++cnt]=t;
                if(m<0){
                    cout<<-1<<"\n";
                    pd=1;
                    break;
                }
            }
        }
        if(pd){
            continue;
        }
        if(m==1){
            if(num[cnt]!=1){
                cout<<-1<<"\n";
                continue;
            }
            num[cnt]++;
        }else if(m%2==0){
            num[++cnt]=m/2;
            num[++cnt]=m/2;
        }else{
            num[++cnt]=1;
            num[++cnt]=2;
            num[++cnt]=(m-3)/2;
            num[++cnt]=(m-3)/2;
        }
        cout<<cnt<<"\n";
        foru(i,1,cnt){
            cout<<num[i]<<" ";
        }
        cout<<"\n";
    }
    return 0;
}