Skip to main content

Hail XOR December codechef challenge problem solution 2020

 Hail XOR  December codechef challenge problem solution 2020-

Hail XOR problem is taken from December codechef challenge 2020. Let's read problem statement.

You are given a sequence A1,A2,,AN and you have to perform the following operation exactly X times:

  • Choose two integers i and j such that 1i<jN.
  • Choose a non-negative integer p.
  • Change Ai to Ai2p, and change Aj to Aj2p, where  denotes bitwise XOR.

Find the lexicographically smallest sequence which can be obtained by performing this operation exactly X times.

A sequence B1,B2,,BN is said to be lexicographically smaller than a sequence C1,C2,,CN if there is an index i such that Bi<Ci and for each valid j<iBj=Cj.


  • The first line of the input contains a single integer T denoting the number of test cases. The description of T test cases follows.
  • The first line of each test case contains two space-separated integers N and X.
  • The second line contains N space-separated integers A1,A2,,AN.


For each test case, print a single line containing N space-separated integers ― the lexicographically smallest obtainable sequence.


  • 1T10
  • 2N105
  • 1X109
  • 1Ai109 for each valid i


Subtask #1 (30 points): N100

Subtask #2 (70 points): original constraints

Example Input

3 3
2 2 3

Example Output

0 0 3


Example case 1: The original sequence is (2,2,3). Consider the following three operations:

  • Choose i=1j=2 and p=1. Then, A1 changes from 2 to 221=0 and similarly, A2 changes from 2 to 221=0. Now the sequence is (0,0,3).
  • Next, choose i=1j=2 and p=1. Then, A1 changes to 021=2 and A2 changes to 021=2. The sequence is (2,2,3).
  • Next, again choose i=1j=2 and p=1. Then, A1 changes to 221=0 and A2 changes to 221=0. The sequence is (0,0,3) again.

We can check that after exactly 3 operations, this is the lexicographically smallest sequence we can obtain.

Solution -

hint- You have to iterate n time not x time.

Actually Hail XOR is easy-medium level question of this contest.You it's is pretty easy once you get 1 test case and general approach 

to solve this question. As i told you in hint that you have to iterate n time not x time so we will first iterate through the array 

and we will try to reduce ith element as small as possible in one operation. We can reduce current element 2^(msb) most significant bit.

so we will reduct ith elemet a[i] XOR 2^(msb) and for jth element we will iterate from i+1 elment to n and we found any element witch 

gives smaller value when we do XOR this number with 2^msb we select that element and reduct a[j]=a[j] XOR 2^(msb)

if we do not find such element we will choose last element as jth element.

we will not increment i until a[i] become zero or total operation become zero.

in next time we will search for next msb of ith element. and reapeat same process until a[i] become zero.

for msb i have written a function which return all set bit position in curr element.

after i reach to n-1 ans still some operation left we can achive same squence if n is not equal to 2.

Special case-

if(remainng operation is odd and n==2){









finally we print the array.

Here is my solution.

Join Telegram Channel for More Editorial. 


Popular posts from this blog

Vaccine Distribution Codechef December Long challenge solution 2020

 Vaccine Distribution  Codechef December Long challenge solution 2020- This Problem vaccine distribution is taken from December long challenge 2020. lets read problem statement. Problem statement- Finally, a COVID vaccine is out on the market and the Chefland government has asked you to form a plan to distribute it to the public as soon as possible. There are a total of  N N  people with ages  a 1 , a 2 , … , a N a 1 , a 2 , … , a N . There is only one hospital where vaccination is done and it is only possible to vaccinate up to  D D  people per day. Anyone whose age is  ≥ 80 ≥ 80  or  ≤ 9 ≤ 9  is considered to be  at risk . On each day, you may not vaccinate both a person who is at risk and a person who is not at risk. Find the smallest number of days needed to vaccinate everyone. Input The first line of the input contains a single integer  T T  denoting the number of test cases. The description of  T T  test cases follows. The first line of each test case contains two space-separ

Codechef February long challenge solution 2021

   Codechef February  long challenge solution 2021- Hey guys Welcome Again, A small update CodeChef February  long challenge solution 2021 starting from 1st week of beb  2021 . Codechef long challenge is one of the popular contests of CodeChef you should participate in codechef Feb  long challenge.This is first contest of codechef in 2021 so good luck. And wish you happy new year. Contest link- I will post the solution after Contest.Stay tuned. About CodeChef  February  long challenge solution 2021: CodeChef Long Challenge is a 10-day monthly coding contest where you can show off your computer programming skills. The significance being - it gives you enough time to think about a problem, try different ways of attacking the problem, read the concepts etc. If you’re usually slow at solving problems and have ample time at hand, this is ideal for you. We also put in a lot of efforts in getting quality problems, w

Merge Two sorted array Without Extra Space

Problem statement-  Given two sorted arrays arr1[] and arr2[] of sizes N and M in non-decreasing order. Merge them in sorted order without using any extra space. Modify arr1 so that it contains the first N elements and modify arr2 so that it contains the last M elements.    Example 1: Input:  N = 4, arr1[] = [1 3 5 7]  M = 5, arr2[] = [0 2 6 8 9] Output:  arr1[] = [0 1 2 3] arr2[] = [5 6 7 8 9] Explanation: After merging the two  non-decreasing arrays, we get,  0 1 2 3 5 6 7 8 9.   Example 2: Input:  N = 2, arr1[] = [10, 12]  M = 3, arr2[] = [5 18 20] Output:  arr1[] = [5 10] arr2[] = [12 18 20] Explanation: After merging two sorted arrays  we get 5 10 12 18 20. Your Task: You don't need to read input or print anything. You only need to complete the function merge() that takes arr1, arr2, N and M as input parameters and modifies them in-place so that they look like the sorted merged array when concatenated. Expected Time Complexity:  O((n+m) log(n+m)) Expected Auxilliary Space: O(1