题解 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见祖宗。
大佬们应该知道啥意思