题解:CF1790E Vlad and a Pair of Numbers
前置知识
二进制运算
题目解析
文章中,
考虑如何用位运算实现加法。
给出一个公式。
解释这个公式。显然
根据原题,因为是向下取整,显然
这里讲述一种简单判断方法,显然只有异或结果和与结果有至少一位同时为
接下来构造数据。构造其实很简单,这里讲述一种最快的方法。我们说
然后推导
因为
做完了。
正解代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
int t;
cin>>t;
while(t--)
{
int x;
cin>>x;
int andx=(x+(x%2))>>1;//这里加上 x%2的余数就一定是 2的倍数了。
if((andx&x)>=1)
{
cout<<"-1\n";
continue;
}
cout<<andx<<" "<<(x^andx)<<"\n";
}
return 0;
}