Create an array such that XOR of subarrays of length K is X

Given three integers N, K and X, the task is to construct an array of length N, in which XOR of all elements of each contiguous sub-array of length K is X.

Examples:

Input: N = 5, K = 1, X = 4
Output: 4 4 4 4 4
Explanation:
Each subarray of length 1 has Xor value equal to 4.

Input: N = 5, K = 2, X = 4
Output: 4 0 4 0 4
Explanation:
Each subarray of length 2 has Xor value equal to 4.

Approach:
To solve the problem mentioned above, we need to follow the steps given below:



  • Bitwise-XOR of any number, X with 0 is equal to the number itself. So, if we set the first element of the array A as X, and the next K – 1 elements as 0, then we will have the XOR of elements of first sub-array of length K, equal to X.
  • If we set A[K] as A[0], then we will have XOR(A[1], …, A[K]) = X. Similarly, if we set A[K + 1] as A[1], then we will have XOR(A[2], …, A[K+1]) = X
  • Continuing in this manner, we can observe that the general formula can be described as below:
  • A[i] = X, when i % K == 0
    A[i] = 0, when i % K != 0 where i is in the range [0,N – 1]

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation to Create an array
// in which the XOR of all elements of
// each contiguous sub-array of
// length K is X
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to construct the array
void constructArray(int N, int K, int X)
{
  
    // Creating a vector of size K,
    // initialised with 0
    vector<int> ans(K, 0);
  
    // Initialising the first element
    // with the given XOR
    ans[0] = X;
  
    for (int i = 0; i < N; ++i) {
        cout << ans[i % K] << " ";
    }
  
    cout << endl;
}
  
// Driver code
int main()
{
    int N = 5, K = 2, X = 4;
  
    constructArray(N, K, X);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation to create an array 
// in which the XOR of all elements of 
// each contiguous sub-array of 
// length K is X 
class GFG{
      
// Function to construct the array 
public static void constructArray(int N, int K,
                                         int X) 
      
    // Creating an array of size K, 
    // initialised with 0 
    int[] ans = new int[K];
       
    // Initialising the first element 
    // with the given XOR 
    ans[0] = X; 
      
    for(int i = 0; i < N; ++i)
    {
       System.out.print(ans[i % K] + " ");
    
  
// Driver code
public static void main(String[] args)
{
    int N = 5, K = 2, X = 4
      
    constructArray(N, K, X); 
}
}
  
// This code is contributed by divyeshrabadiya07

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation to create an array 
# in which the XOR of all elements of 
# each contiguous sub-array of 
# length K is X 
  
# Function to construct the array 
def constructArray(N, K, X):
      
    # Creating a list of size K, 
    # initialised with 0 
    ans = []
      
    for i in range(0, K):
        ans.append(0)
          
    # Initialising the first element 
    # with the given XOR 
    ans[0] = X
          
    for i in range(0, N):
        print(ans[i % K], end = " ")
  
# Driver code 
N = 5
K = 2
X = 4
  
# Function call
constructArray(N, K, X)
  
# This code is contributed by ishayadav181

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation to create an array 
// in which the XOR of all elements of 
// each contiguous sub-array of 
// length K is X 
using System;
  
class GFG{
      
// Function to construct the array 
public static void constructArray(int N, int K,
                                         int X) 
      
    // Creating an array of size K, 
    // initialised with 0 
    int[] ans = new int[K];
      
    // Initialising the first element 
    // with the given XOR 
    ans[0] = X; 
      
    for(int i = 0; i < N; ++i)
    {
        Console.Write(ans[i % K] + " ");
    
  
// Driver code
public static void Main(string[] args)
{
    int N = 5, K = 2, X = 4; 
      
    constructArray(N, K, X); 
}
}
  
// This code is contributed by rutvik_56

chevron_right


Output:

4 0 4 0 4

Time Complexity: O(N)

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.