1325 D. Ehab the Xorcist

2020-03-15  本文已影响0人  evilgiven

题意:

给两个数字 u,v 求一个最短的数组 {ai} 使得数组内所有数字异或的结果为u 且和为v

思路:

分情况讨论一下

code

#include <bits/stdc++.h>

using namespace std;

int main()
{
    ios::sync_with_stdio(false);

    long long u, v;

    cin >> u >> v;
    if (u > v || (v - u) & 1) cout << -1 << endl;
    else if (u == v) {
        if (u == 0) cout << 0 << endl;
        else cout << 1 << endl << u << endl;
    } else {
        long long x = (v - u) >> 1;
        if (u + x == (u ^ x)) cout << 2 << endl << u + x << ' ' << x << endl;
        else cout << 3 << endl << u << ' ' << x << ' ' << x << endl;
    }

    return 0;
}

上一篇 下一篇

猜你喜欢

热点阅读