En primer lugar, ¿cuándo es un número par? Un número es par si el LSB en su representación binaria es 0 y de lo contrario es extraño.
// xor de dos bits es 0 si ambos bits son iguales
// de lo contrario es 1
0 xo 0 = 0
1 xo 1 = 0
1 xo 0 = 1
0 xo 1 = 1
Ahora, si queremos que XOR de dos números A y B sea par, entonces el XOR del LSB debe ser 0. Entonces, A y B deben ser impares o A y B deben ser ambos pares.
- ¿Cuáles son los algoritmos de optimización más simples y fundamentales?
- ¿Qué algoritmos gráficos (10-15, tal vez) sugeriría que hicieran bien en la programación competitiva?
- ¿Por qué se ejecuta un análisis de tiempo de un algoritmo llamado asintótico?
- ¿Qué temas puedo estudiar después de aprender Java y C (aplicaciones de estructuras de datos, etc.)?
- ¿Es bueno analizar?
Solucionemos el problema real. Su pregunta no contiene todos los detalles sobre la matriz. ¿La matriz contiene duplicados? Si es así, ¿tenemos que contar el mismo par dos veces para elementos duplicados? Además, la pregunta se refiere a ‘Par ordenado’. Pero en la solución de ejemplo ha mencionado solo [4,2] y no [2,4].
Aquí presentaré un enfoque O (n) para encontrar el número de pares desordenados de una matriz cuyo xor es par. Además, supongo que no contiene duplicados. Este método puede extenderse fácilmente a casos con duplicados y pares ordenados.
Cuente el número de números pares e impares en la matriz. En)
// Sea e y o el número de números pares e impares respectivamente
// No hay formas de elegir un par de números pares = C (e, 2)
// No hay formas de elegir un par de números impares = C (o, 2)
number_of_even_xor_pairs = C (e, 2) + C (o, 2)
Aquí está el código de Python:
def count_even_xor_pair (aList):
par = 0
impar = 0
para el número en una Lista:
si el número% 2 == 0:
incluso + = 1
más:
impar + = 1
return (par * (par-1) + impar * (impar-1)) / 2