Enlace: https://ac.nowcoder.com/acm/contest/11334/D
Fuente: Niuke
La descripción del título
a + b {} a + b es x {} x, y a & b {} a & b es y {} y. Primero, es necesario determinar si un conjunto de a, b {} a, b puede satisfacer la situación actual. En caso afirmativo, busque a xo b {} a xor b; de lo contrario, la salida -1 {} - 1
(donde a, b {}> 0a, b> 0).
Descripción de entrada: la
primera línea es un entero positivo t, que significa grupo Número {} La primera línea es un entero positivo t, que representa el número de grupos
(t <= 2 × 10 ^ 5) (t <= 2 × 10
5
)
Las siguientes t filas, cada fila tiene dos números enteros x, y {} Las siguientes t filas, cada fila tiene dos números enteros x, y
(0 <= x, y <= 1 × 10 ^ {18}) (0 < = x, y <= 1 × 10
18
)
Descripción de la salida:
para cada grupo de datos, la salida a xor b o -1 según el significado de la pregunta
Ejemplo 1 Copia de
entrada 1 2 1 Copia de salida 0 Ejemplo 2 Copia de entrada 1 2 2 Copia de salida -1
Debemos citar más ejemplos para ver si hay escasez. Descubriremos que si la diferencia yb y no son 0, entonces esa parte no debe ser la parte OR, por lo que la salida debe ser -1 en este momento.
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T;
cin >> T;
while(T --){
unsigned long long x, y;
cin >> x >> y;
unsigned long long ans = 2 * y;
//cout << x << " " << ans << endl;
// cout << ans - x << endl;
if (x < ans || ((x - ans) & y) != 0) cout << "-1" << endl;
else cout << (x - ans) << endl;
}
return 0;
}