E. Vlad and a Pair of Numbers

题解

首先,我们知道异或运算是无进位相加,那么a^b=x我们不妨先让a=x,b=0;而a,b其余二进制位上要么同为0,要么同为1。接下来,根据题意a+b=2x,我们可知我们同时为a,b加上x/2。此时再判断a^b是否等于x即可。

code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
    int t;
    cin>>t;
    while (t--){
        ll x;
        ll a,b;
        cin>>x;
        a=x/2;
        b=x+x-a;
        if ((a^b)==x) cout<<a<<" "<<b<<endl;
        else cout<<-1<<endl;
    }
    return 0;
} 

 

posted @ 2024-04-07 21:23  黑屿白  阅读(27)  评论(0)    收藏  举报