B. Binary Colouring

给你一个正整数 x 。请找出下列条件成立的任意整数数组 a0,a1,,an1

可以证明,在问题的限制条件下,总是存在一个有效的数组。

Solution

位运算

本题的难点主要是注意到一个变形:

ai+ai+1=ai+2ai

若某位数的第 i 位满足:(ai,ai+1)=(1,1),则不满足要求,需要变为 (ai,ai+1,ai+2)=(1,0,1)

void solve() {
    int x;cin >> x;
    vector<int> ans;
    for (int i = 0;i <= __lg(x);i++) {
        if (((x >> i) & 1) && ((x >> (i + 1)) & 1)) {
            ans.push_back(-1);
            x += (1 << (i + 1));
        } else {
            ans.push_back((x >> i) & 1);
        }
    }
    cout << ans.size() << '\n';
    for (auto x : ans)cout << x << " ";cout << '\n';
}