Checkpoints

首先奇数肯定不行

构造如果都是1 一个1的价值为2 肯定是不够的

考虑尽可能构造0

如果是 10 那次数分别是 4 2 倒一下就是 2 4

如果是 100 那次数分别是 8 4 2 倒一下就是 2 4 8

所以尽可能接尽可能多的0 模拟一下就好

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
ll K;
void solve(){
    vector<int> res;
    if(K % 2 != 0){
        cout << -1 << endl;
        return;
    }
    
    while(K > 0){
        ll now = 2;
        res.push_back(1);
        while(K >= 2*now+2){		//不断的补0
            res.push_back(0);
            now = 2*now + 2;
        }
        K -= now;
    }
    cout << res.size() << endl;
    for(int i = 0;i < res.size();i += 1){
        cout << res[i];
        if(i + 1 != res.size()){
            cout << " ";
        }else{
            cout << endl;
        }
    }
}
int main(void){
    int T;
    cin >> T;
    while(T--){
        cin >> K;
        solve();
    }
    return 0;
}
posted @ 2022-04-22 19:04  wzx_believer  阅读(108)  评论(0)    收藏  举报