Find an N x N grid whose xor of every row and column is equal
Given an integer N which is a multiple of 4, the task is to find an N x N grid for which the bitwise xor of every row and column is the same.
Examples:
Input: N = 4
Output:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Input: N = 8
Output:
0 1 2 3 16 17 18 19
4 5 6 7 20 21 22 23
8 9 10 11 24 25 26 27
12 13 14 15 28 29 30 31
32 33 34 35 48 49 50 51
36 37 38 39 52 53 54 55
40 41 42 43 56 57 58 59
44 45 46 47 60 61 62 63
Approach: To solve this problem let’s fix the xor of every row and column to 0 since xor of 4 consecutive numbers starting from 0 is 0. Here is an example of a 4 x 4 matrix:
0 ^ 1 ^ 2 ^ 3 = 0
4 ^ 5 ^ 6 ^ 7 = 0
8 ^ 9 ^ 10 ^ 11 = 0
12 ^ 13 ^ 14 ^ 15 = 0
and so on.
If you notice in the above example, the xor of every row and column is 0. Now we need to place the numbers in such a way that the xor of each row and column is 0. So we can divide our N x N matrix into smaller 4 x 4 matrices with N / 4 rows and columns and fill the cells in a way that the xor of every row and column is 0.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void findGrid( int n)
{
int arr[n][n];
int x = 0;
for ( int i = 0; i < n / 4; i++) {
for ( int j = 0; j < n / 4; j++) {
for ( int k = 0; k < 4; k++) {
for ( int l = 0; l < 4; l++) {
arr[i * 4 + k][j * 4 + l] = x;
x++;
}
}
}
}
for ( int i = 0; i < n; i++) {
for ( int j = 0; j < n; j++) {
cout << arr[i][j] << " " ;
}
cout << "\n" ;
}
}
int main()
{
int n = 4;
findGrid(n);
return 0;
}
|
Java
import java.io.*;
class GFG
{
static void findGrid( int n)
{
int [][]arr = new int [n][n];
int x = 0 ;
for ( int i = 0 ; i < n / 4 ; i++)
{
for ( int j = 0 ; j < n / 4 ; j++)
{
for ( int k = 0 ; k < 4 ; k++)
{
for ( int l = 0 ; l < 4 ; l++)
{
arr[i * 4 + k][j * 4 + l] = x;
x++;
}
}
}
}
for ( int i = 0 ; i < n; i++)
{
for ( int j = 0 ; j < n; j++)
{
System.out.print(arr[i][j] + " " );
}
System.out.println( " " );
}
}
public static void main (String[] args)
{
int n = 4 ;
findGrid(n);
}
}
|
Python3
def findGrid(n):
arr = [[ 0 for k in range (n)]
for l in range (n)]
x = 0
for i in range (n / / 4 ):
for j in range (n / / 4 ):
for k in range ( 4 ):
for l in range ( 4 ):
arr[i * 4 + k][j * 4 + l] = x
x + = 1
for i in range (n):
for j in range (n):
print (arr[i][j], end = " " )
print ()
n = 4
findGrid(n)
|
C#
using System;
class GFG
{
static void findGrid( int n)
{
int [,]arr = new int [n, n];
int x = 0;
for ( int i = 0; i < n / 4; i++)
{
for ( int j = 0; j < n / 4; j++)
{
for ( int k = 0; k < 4; k++)
{
for ( int l = 0; l < 4; l++)
{
arr[i * 4 + k, j * 4 + l] = x;
x++;
}
}
}
}
for ( int i = 0; i < n; i++)
{
for ( int j = 0; j < n; j++)
{
Console.Write(arr[i, j] + " " );
}
Console.WriteLine( " " );
}
}
public static void Main (String[] args)
{
int n = 4;
findGrid(n);
}
}
|
Javascript
<script>
function findGrid(n)
{
let arr = new Array(n);
for (let i = 0; i < n; i++)
arr[i] = new Array(n);
let x = 0;
for (let i = 0; i < parseInt(n / 4); i++) {
for (let j = 0; j < parseInt(n / 4); j++) {
for (let k = 0; k < 4; k++) {
for (let l = 0; l < 4; l++) {
arr[i * 4 + k][j * 4 + l] = x;
x++;
}
}
}
}
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
document.write(arr[i][j] + " " );
}
document.write( "<br>" );
}
}
let n = 4;
findGrid(n);
</script>
|
Output:
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Time Complexity: O(N2)
Auxiliary Space: O(N2)
Last Updated :
17 Nov, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...