El misterio de las operaciones de bits

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;
}

Supongo que te gusta

Origin blog.csdn.net/qq_45772483/article/details/112559876
Recomendado
Clasificación