1790E
题意:给出一个
x
x
x,找出
a
a
a,
b
b
b,使得满足:
x
x
x =
(
a
(a
(a +
b
)
b)
b)
/
2
/2
/2 =
a
a
a ^
b
b
b
思路:对位观察,
x
x
x 为1位,
a
a
a
b
b
b 该位也需为1,
x
x
x 为0位,
a
a
a
b
b
b 中该位至少有一个0,。
(
a
( a
(a +
b
)
b )
b) /2 可以看做
a
a
a
b
b
b 每位相加 最终向右移一位,由此建立相邻两位间的关系,推出矛盾特判
#include <bits/stdc++.h>
#define ll long long
using namespace std;
void solve()
{
int n,temp;
cin>>n;
temp=n;
if (n%2==1)
{
cout<<"-1\n";
return ;
}
vector<int> a,ans;
while (n)
{
a.push_back(n%2);
n/=2;
}
for (int i=1;i<a.size();i++)
{
if (a[i]==1&&a[i-1]==1)
{
cout<<"-1\n";
return;
}
}
for (int i=0;i<a.size();i++)
{
if (a[i]==0&&a[i+1]==1)
ans.push_back(1);
else
ans.push_back(0);
}
int s=1,tol=0;
for (auto i:ans)
{
if (i==1)
tol+=s;
s*=2;
}
cout<<tol<<" "<<(temp^tol)<<"\n";
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while (t--)
{
solve();
}
return 0;
}