Advertisement
Kali_prasad

xometry codechef

Jan 18th, 2025
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.20 KB | None | 0 0
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4. // https://www.codechef.com/problems/XSQR
  5. class Codechef
  6. {
  7.     static Scanner sc = new Scanner(System.in);
  8.  
  9.     public static int[] getArray(){
  10.         String[] sArr = sc.nextLine().split(" ");
  11.         int[] arr = Arrays.stream(sArr).mapToInt(Integer::parseInt).toArray();
  12.         return arr;
  13.     }
  14.     public static void main (String[] args) throws java.lang.Exception
  15.     {
  16.         int tc =  getArray()[0];
  17.         while(tc>0){
  18.             tc-=1;
  19.             int arrLen = getArray()[0];
  20.             int[] arr = getArray();
  21.             int[] mapp = new int[(int)Math.pow(10,6)+1];//hashmap might result in TLE for this question and also no one crosses n xor operation when pairs of elements choosen below or equal to n
  22.             int[] backupMapp = mapp.clone();
  23.            
  24.             /**
  25.              * we dont need to care about ai aj ak al
  26.              * as per diagram
  27.              * given ai xor aj = ak xor al
  28.              *
  29.              * applying rhs xor to both rhs will give us
  30.              * ai xor aj xor ak xor al = 0
  31.              * this becomes simliar to what we solved in 4 sum n^2 solution
  32.             */
  33.             //load the n^2 combinations into mapp
  34.             for(int k =0;k<arrLen;k+=1){
  35.                 for(int l = k+1 ; l<arrLen;l+=1)    {
  36.                     mapp[arr[k]^arr[l]]+=1;
  37.                 }        
  38.             }
  39.             int count = 0;
  40.             for(int j = 1;j<arrLen;j+=1){
  41.                // backupMapp = mapp.clone()
  42.                 for(int i =0 ;i<j;i+=1){
  43.                     count +=mapp[arr[j]^arr[i]];
  44.                     if(mapp[arr[j]^arr[i]]>0){
  45.                         mapp[arr[j]^arr[i]]-=1;
  46.                     }
  47.                 }
  48.                 //need to give the space for j+1 and remove already hashed combinations in backupMapp
  49.                 int jp1 = j+1;
  50.                 for(int temp =jp1+1;temp<arrLen;temp+=1 ){
  51.                     int currXor = arr[jp1]^arr[temp];
  52.                     if(backupMapp[arr[jp1]^arr[temp]]>0){
  53.                        backupMapp[arr[jp1]^arr[temp]]-=1;
  54.                     }
  55.                 }
  56.                 mapp = backupMapp.clone();//transfer to the main mapp
  57.             }
  58.        
  59.             System.out.println(count*(4*3*2*1));
  60.         }
  61.        
  62.  
  63.     }
  64. }
  65.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement