Codeforces Round #688 (Div. 2) D

D. Checkpoints

对于单独的一个1 我们知道他的贡献为2
11 呢贡献值为4
101 贡献值为8
1001 贡献值为16
然后二进制拼凑就可以了
对于有奇数的显然-1

void solve(){
    int n;cin>>n;
    if(n&1){
        cout<<-1<<endl;
        return;
    }
    vector<int>ans;
    for(int i=63;i>=0;i--){
        if((1ll<<i)&n){
            if(i!=1){
                ans.push_back(1);
                for(int j=1;j<i-1;j++)ans.push_back(0);
            }
            ans.push_back(1);
        }
    }
    cout<<ans.size()<<endl;
    for(auto i:ans)cout<<i<<" ";cout<<endl;
}
posted @ 2022-11-11 17:42  ycllz  阅读(13)  评论(0)    收藏  举报