XOR bit a bit de una subarray de una array generada a partir de una array dada

Dada una array arr[] de longitud N, , se definió una array de dimensiones N * N en la array arr[] donde M i, j = arr i & arr j . Dados cuatro enteros X, Y, S y T , la tarea es encontrar el XOR bit a bit de todos los elementos de la subarray desde la parte superior izquierda (X, Y) hasta la parte inferior derecha (S, T) .

Ejemplos:

Entrada: N = 3, A[] = {2, 3, 4}, (X, Y)=(0, 1), (S, T)=(2, 2)
Salida: 5
Explicación:
Array definida en A es
{{(2 y 2), (2 y 3), (2 y 4)}, 
{(3 y 2), (3 y 3), (3 y 4)}, 
{(4 y 2), (4 y 3), (4 y 4)}}

Finalmente, la array será:
{{2, 2, 0}, 
{2, 3, 0}, 
{0, 0, 4}}
valor XOR = (2^0)^(3^0)^(0^ 4) = 5

Entrada: N=3, A[]={1, 2, 3}, (X, Y)=(0, 1), (S, T)=(1, 2)
Salida: 1

Enfoque ingenuo: el enfoque más simple es generar la array M a partir de la array dada y calcular el XOR bit a bit de todos los elementos presentes en la subarray dada de M.

Tiempo Complejidad: O(N 2
Espacio Auxiliar: O(N 2 )

Enfoque eficiente: la idea es utilizar la siguiente propiedad distributiva de las operaciones ‘XOR’ y ‘AND’: 

(A y B) ^ (A y C) = A y (B ^ C)

Por lo tanto, el XOR final de la subarray desde la parte superior izquierda (X, Y) hasta la parte inferior derecha (S, T) se puede calcular a partir de la siguiente ecuación: 

XOR final
= (XOR de la fila X)^(XOR de la fila X+1)^. . . . ^(XOR de la fila S)
= (A X & (A Y ^. . . .^ A T )) ^ ….
. . . ^(A S & (A Y ^. . . .^A T ))
= (A Y ^. . . .^A T )&(A X ^. . .^A S )

  • Itere sobre la array desde los índices Y hasta T y calcule el XOR de los elementos.
  • Recorra la array desde los índices X a S y calcule el XOR de los elementos.
  • Finalmente, calcule el AND bit a bit de los XOR calculados, que es igual al XOR bit a bit de la subarray de (X, Y) a (S, T)

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program of the
// above approach
 
#include <iostream>
using namespace std;
 
// Function to find the submatrix
// XOR of the given matrix
int submatrix_xor(int* A, int N,
                  int X, int Y,
                  int S, int T)
{
    int left_xor = 0, i, right_xor = 0;
 
    // Calculating left xor
    // i.e A[Y]^A[Y+1]^. . .^A[T]
    for (i = Y; i <= T; i++) {
        left_xor ^= A[i];
    }
 
    // Calculating right xor
    // i.e A[X]^A[X+1]^. . .^A[S]
    for (i = X; i <= S; i++) {
        right_xor ^= A[i];
    }
 
    // Bitwise AND of left_xor and
    // right_xor gives required result
    return left_xor & right_xor;
}
 
// Driver Code
int main()
{
    int A[3] = { 2, 3, 4 }, X = 0,
        Y = 1, S = 2, T = 2, N = 3;
 
    // Printing xor of submatrix
    cout << submatrix_xor(A, N, X,
                          Y, S, T);
    return 0;
}

Java

// Java program of the
// above approach
import java.io.*;
 
class GFG{
  
// Function to find the submatrix
// XOR of the given matrix
static int submatrix_xor(int[] A, int N,
                         int X, int Y,
                         int S, int T)
{
    int left_xor = 0, i, right_xor = 0;
  
    // Calculating left xor
    // i.e A[Y]^A[Y+1]^. . .^A[T]
    for(i = Y; i <= T; i++)
    {
        left_xor ^= A[i];
    }
  
    // Calculating right xor
    // i.e A[X]^A[X+1]^. . .^A[S]
    for(i = X; i <= S; i++)
    {
        right_xor ^= A[i];
    }
  
    // Bitwise AND of left_xor and
    // right_xor gives required result
    return left_xor & right_xor;
}
  
// Driver Code
public static void main (String[] args)
{
    int[] A = { 2, 3, 4 };
    int X = 0, Y = 1, S = 2,
        T = 2, N = 3;
  
    // Printing xor of submatrix
    System.out.print(submatrix_xor(A, N, X,
                                   Y, S, T));
}
}
 
// This code is contributed by code_hunt

Python3

# Python3 program of the
# above approach
 
# Function to find the submatrix
# XOR of the given matrix
def submatrix_xor(A, N, X, Y, S, T):
     
    left_xor = 0
    i = 0
    right_xor = 0
 
    # Calculating left xor
    # i.e A[Y]^A[Y+1]^. . .^A[T]
    for i in range(Y, T + 1):
        left_xor ^= A[i]
 
    # Calculating right xor
    # i.e A[X]^A[X+1]^. . .^A[S]
    for i in range(X, S + 1):
        right_xor ^= A[i]
 
    # Bitwise AND of left_xor and
    # right_xor gives required result
    return left_xor & right_xor
 
# Driver Code
if __name__ == '__main__':
     
    A = [ 2, 3, 4 ]
    X = 0
    Y = 1
    S = 2
    T = 2
    N = 3
 
    # Printing xor of submatrix
    print(submatrix_xor(A, N, X, Y, S, T))
 
# This code is contributed by mohit kumar 29

C#

// C# program for the above approach 
using System;
 
class GFG{
  
// Function to find the submatrix
// XOR of the given matrix
static int submatrix_xor(int[] A, int N,
                         int X, int Y,
                         int S, int T)
{
    int left_xor = 0, i, right_xor = 0;
  
    // Calculating left xor
    // i.e A[Y]^A[Y+1]^. . .^A[T]
    for(i = Y; i <= T; i++)
    {
        left_xor ^= A[i];
    }
  
    // Calculating right xor
    // i.e A[X]^A[X+1]^. . .^A[S]
    for(i = X; i <= S; i++)
    {
        right_xor ^= A[i];
    }
  
    // Bitwise AND of left_xor and
    // right_xor gives required result
    return left_xor & right_xor;
}
  
// Driver Code
public static void Main ()
{
    int[] A = { 2, 3, 4 };
    int X = 0, Y = 1, S = 2,
        T = 2, N = 3;
  
    // Printing xor of submatrix
    Console.Write(submatrix_xor(A, N, X,
                                Y, S, T));
}
}
 
// This code is contributed by code_hunt

Javascript

<script>
 
// JavaScript program to implement
// the above approach
 
// Function to find the submatrix
// XOR of the given matrix
function submatrix_xor(A, N, X, Y, S, T)
{
    let left_xor = 0, i, right_xor = 0;
   
    // Calculating left xor
    // i.e A[Y]^A[Y+1]^. . .^A[T]
    for(i = Y; i <= T; i++)
    {
        left_xor ^= A[i];
    }
   
    // Calculating right xor
    // i.e A[X]^A[X+1]^. . .^A[S]
    for(i = X; i <= S; i++)
    {
        right_xor ^= A[i];
    }
   
    // Bitwise AND of left_xor and
    // right_xor gives required result
    return left_xor & right_xor;
}
 
// Driver code
    let A = [ 2, 3, 4 ];
    let X = 0, Y = 1, S = 2,
        T = 2, N = 3;
   
    // Printing xor of submatrix
    document.write(submatrix_xor(A, N, X,
                                   Y, S, T));
 
// This code is contributed by target_2.
</script>
Producción: 

5

 

Complejidad de tiempo: O(N), donde N es el tamaño de la array
Espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por ManikantaBandla y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *