¿Encontrar XOR de pares ordenados en una matriz que está incluso con O (n)?

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.

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

Se puede resolver fácilmente. Solo tiene que contar el número de elementos pares e impares. como xor de dos elementos será par si y solo si ambos elementos son impares o ambos elementos son pares.

#include
usando el espacio de nombres estándar;
int main ()
{
int n;
cin >> n;
vector vec (n);
para (int i = 0; i cin >> vec [i];
int impar = 0, par = 0;
para (int i = 0; i si (vec [i] y 1)
impar ++;
de lo contrario, incluso ++;
int ans = (impar * (impar-1)) / 2 + (par * (par-1)) / 2; // formas de elegir 2 elementos de n elemento nC2.
cout << ans << endl;

}

Espero que ayude …

More Interesting

¿Por qué el algoritmo de búsqueda binaria no es adecuado para usar en una tabla con punteros?

¿Por qué utilizar el árbol de búsqueda ternario en lugar de reemplazar cada nodo de Trie a un árbol BST?

¿Qué métricas deberían usarse para crear una puntuación de confiabilidad automática para los artículos de Wikipedia?

¿Cómo verificamos la corrección de un algoritmo?

¿Cuál es la diferencia entre el algoritmo que venció a los humanos en el ajedrez y el algo que venció a los humanos en Go?

¿Qué es la generación procesal y la generación aleatoria? ¿Cuál es la diferencia y cómo se logra cada uno?

¿Es posible implementar algoritmos de aprendizaje automático en lenguaje ensamblador?

Actualmente estoy leyendo un libro sobre estructuras de datos y algoritmos. ¿Cuáles son algunos recursos que puedo usar para practicar la implementación?

¿Cuánto tiempo / horas debo pasar todos los días para ser un buen programador de Java para poder resolver estructuras de datos y algoritmos con ese lenguaje en el futuro?

Traté de hacer este problema: 1984 - Pesadilla de navegación, pero obtengo TLE. ¿Cómo puedo mejorar mi algoritmo? ¿Cuál es la explicación de esta tarea?

¿Cuáles son los requisitos previos para la introducción del algoritmo antes de tomarlo?

¿Cuánto cálculo se requiere para comprender algoritmos y redes de computadoras?

Sistemas distribuidos: ¿es posible utilizar el algoritmo de Paxos para generar números de secuencia (seqnums)?

Una función de densidad de probabilidad, f, no es cero cuando a <x 0. ¿Cuáles son las restricciones en a, by k?

¿Cuáles son algunos ejemplos de problemas que son: (1) NP pero no NP-Complete; (2) NP-Completo; (3) NP-Hard pero no NP-Complete?