CF1790E题解
题意
给定
思路
我们可以先尝试打表,通过打表找到一些规律。
#include<bits/stdc++.h>
using namespace std;
inline long long read();
int main()
{
for(int x=1;x<=1000;x++)
for(int i=1;i<=x*2;i++)
if((i^(x*2-i))==x)
{
cout<<x<<" "<<i<<" "<<(x*2-i)<<"\n";
break;
}
return 0;
}
通过以上代码我们可以得到
结果如下:
传送
通过观察可发现若
所以只要判断
代码
#include<bits/stdc++.h>
using namespace std;
inline long long read();
int main()
{
int t=read();
while(t--)
{
int x=read(),a=x/2,b=x*2-a;
if((a^b)==x)
cout<<a<<" "<<b<<"\n";
else
cout<<"-1\n";
}
return 0;
}
证明——2018ljw
令
最终目标要使总和加上