Check if a number from every row can be selected such that xor of the numbers is greater than zero
Last Updated :
07 Jun, 2022
Given a 2-D array of order N X M array elements, the task is to check if we can select a number from every row in such a way that xor of the selected numbers is greater than 0.
Note: There is a minimum of 2 rows.
Examples:
Input: a[][] = {{7, 7, 7},
{10, 10, 7}}
Output: Yes
Input: a[][] = {{1, 1, 1},
{1, 1, 1},
{1, 1, 1},
{1, 1, 1}}
Output: No
Approach: Initially check if xor of first column elements of every row is 0 or not. If it is non-zero then it is possible. If it is zero, check if any of the rows has two or more distinct elements, then also it is possible. If both of the above conditions are not satisfied, then it is not possible.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
#define N 2
#define M 3
bool check( int mat[N][M])
{
int xorr = 0;
for ( int i = 0; i < N; i++) {
xorr ^= mat[i][0];
}
if (xorr != 0)
return true ;
for ( int i = 0; i < N; i++) {
for ( int j = 1; j < M; j++) {
if (mat[i][j] != mat[i][0])
return true ;
}
}
return false ;
}
int main()
{
int mat[N][M] = { { 7, 7, 7 },
{ 10, 10, 7 } };
if (check(mat))
cout << "Yes" ;
else
cout << "No" ;
return 0;
}
|
Java
import java.io.*;
class GFG
{
static int N = 2 ;
static int M = 3 ;
static boolean check( int mat[][])
{
int xorr = 0 ;
for ( int i = 0 ; i < N; i++)
{
xorr ^= mat[i] [ 0 ];
}
if (xorr != 0 )
return true ;
for ( int i = 0 ; i < N; i++)
{
for ( int j = 1 ; j < M; j++)
{
if (mat[i] [j] != mat[i] [ 0 ])
return true ;
}
}
return false ;
}
public static void main (String[] args)
{
int mat[][] = {{ 7 , 7 , 7 },
{ 10 , 10 , 7 }};
if (check(mat))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
}
|
Python3
N = 2
M = 3
def check(mat):
xorr = 0
for i in range (N):
xorr ^ = mat[i][ 0 ]
if (xorr ! = 0 ):
return True
for i in range (N):
for j in range ( 1 , M):
if (mat[i][j] ! = mat[i][ 0 ]):
return True
return False
mat = [[ 7 , 7 , 7 ],
[ 10 , 10 , 7 ]]
if (check(mat)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class GFG
{
static int N = 2;
static int M = 3;
static bool check( int [,]mat)
{
int xorr = 0;
for ( int i = 0; i < N; i++)
{
xorr ^= mat[i, 0];
}
if (xorr != 0)
return true ;
for ( int i = 0; i < N; i++)
{
for ( int j = 1; j < M; j++)
{
if (mat[i, j] != mat[i, 0])
return true ;
}
}
return false ;
}
static void Main()
{
int [,]mat = {{ 7, 7, 7 },
{ 10, 10, 7 }};
if (check(mat))
Console.Write( "Yes" );
else
Console.Write( "No" );
}
}
|
PHP
<?php
$N = 2;
$M = 3;
function check( $mat )
{
global $N ;
global $M ;
$xorr = 0;
for ( $i = 0; $i < $N ; $i ++)
{
$xorr = $xorr ^ $mat [ $i ][0];
}
if ( $xorr != 0)
return true;
for ( $i = 0; $i < $N ; $i ++)
{
for ( $j = 1; $j < $M ; $j ++)
{
if ( $mat [ $i ][ $j ] != $mat [ $i ][0])
return true;
}
}
return false;
}
$mat = array ( array ( 7, 7, 7 ),
array ( 10, 10, 7 ));
if (check( $mat ))
echo "Yes" ;
else
echo "No" ;
?>
|
Javascript
<script>
let N = 2;
let M = 3;
function check(mat)
{
let xorr = 0;
for (let i = 0; i < N; i++) {
xorr ^= mat[i][0];
}
if (xorr != 0)
return true ;
for (let i = 0; i < N; i++) {
for (let j = 1; j < M; j++) {
if (mat[i][j] != mat[i][0])
return true ;
}
}
return false ;
}
let mat = [ [ 7, 7, 7 ],
[ 10, 10, 7 ] ];
if (check(mat))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Time Complexity: O(N * M)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...