题目描述
难度分:1400
输入T(≤104)表示T组数据。
每组数据输入m(1≤m≤229)。
输出如下方程组的任意一组正整数解(a,b)
- a⊕b=m
- a+b=2m
a和b不能超过232。
如果无解输出−1。
输入样例
6
2
5
10
6
18
36
输出样例
3 1
-1
13 7
-1
25 11
50 22
算法
打表找规律
新年第一天的题目就不会做,打表发现m为奇数的时候肯定无解。m为偶数时可以构造出一个解a=m2,b=3m2,此时需要满足a⊕b=m,不满足就无解。
复杂度复杂度
时间复杂度
只进行了几次位运算和四则运算,因此时间复杂度为O(1)。
空间复杂度
仅使用了有限几个变量,额外空间复杂度为O(1)。
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int T, m;
int main() {
scanf("%d", &T);
while(T--) {
scanf("%d", &m);
if(m&1) {
puts("-1");
}else {
int a = m >> 1;
int b = 2*m - a;
if(a^b == m) printf("%d %d\n", a, b);
else puts("-1");
}
}
return 0;
}