题解 CF76D 【Plus and xor】

· · 题解

楼上大佬和我的方法差不多。

题目大意:

给出两整数A,B,要求找到X,Y满足以下两个个条件:

1.A=X+Y

2.B=X xor Y 其中xor表示异或运算

且要求 X 是所有满足前两个条件中最小的

如果无解,输出-1

否则,输出 X,Y

思路:

根据他的这个xor模拟就行了。代码很短,可以自己推出。

需要满足这几个条件:

1.A=X+Y

2.B=X xor Y 其中xor表示异或运算

且要求 X 是所有满足前两个条件中最小的

程序里首先判断一下不成立的数。如果b>a或者(a-b)%2==1,那么直接输出-1。

否则输出(a-b/2),和a-(a-b/2)就行了。

见代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
typedef unsigned long long ll;//十年OI一场空,不开long long 见祖宗。
int main() {
    ll a,b,x,y;
    cin>>a>>b;//输入
    if(b>a||(a-b)%2==1) cout<<-1<<endl;//第一个判断
    else cout<<(a-b/2)<<" "<<a-(a-b/2)<<endl;//否则
    return 0;//华丽结束
}

提醒:

十年OI一场空,不开longlong见祖宗。

大佬们应该知道啥意思