/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
// your code goes here
}
}
class Solution {
static int subarrayXor(int[] arr, int k) {
int count = 0; // this will store our answer
HashMap
<Integer, Integer
> map
= new HashMap
<>(); // to store prefix XOR frequencies
int prefixXor = 0; // XOR till current index
for (int i = 0; i < arr.length; i++) {
// update the prefix xor
prefixXor = prefixXor ^ arr[i];
// case 1: if prefix itself is equal to k
if (prefixXor == k) {
count = count + 1;
}
// case 2: check if we have seen prefixXor ^ k before
int check = prefixXor ^ k; // this is the required xor
if (map.containsKey(check)) {
count = count + map.get(check);
}
// finally add this prefixXor into the map
if (map.containsKey(prefixXor)) {
int old = map.get(prefixXor);
map.put(prefixXor, old + 1);
} else {
map.put(prefixXor, 1);
}
}
return count;
}
public static void main
(String[] args
) { int[] arr = {4, 2, 2, 6, 4};
int k = 6;
int ans = subarrayXor(arr, k);
System.
out.
println("Total subarrays = " + ans
); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCX0KfQoKCgpjbGFzcyBTb2x1dGlvbiB7CiAgICBzdGF0aWMgaW50IHN1YmFycmF5WG9yKGludFtdIGFyciwgaW50IGspIHsKICAgICAgICBpbnQgY291bnQgPSAwOyAvLyB0aGlzIHdpbGwgc3RvcmUgb3VyIGFuc3dlcgogICAgICAgIEhhc2hNYXA8SW50ZWdlciwgSW50ZWdlcj4gbWFwID0gbmV3IEhhc2hNYXA8PigpOyAvLyB0byBzdG9yZSBwcmVmaXggWE9SIGZyZXF1ZW5jaWVzCgogICAgICAgIGludCBwcmVmaXhYb3IgPSAwOyAvLyBYT1IgdGlsbCBjdXJyZW50IGluZGV4CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgcHJlZml4IHhvcgogICAgICAgICAgICBwcmVmaXhYb3IgPSBwcmVmaXhYb3IgXiBhcnJbaV07CgogICAgICAgICAgICAvLyBjYXNlIDE6IGlmIHByZWZpeCBpdHNlbGYgaXMgZXF1YWwgdG8gawogICAgICAgICAgICBpZiAocHJlZml4WG9yID09IGspIHsKICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBjYXNlIDI6IGNoZWNrIGlmIHdlIGhhdmUgc2VlbiBwcmVmaXhYb3IgXiBrIGJlZm9yZQogICAgICAgICAgICBpbnQgY2hlY2sgPSBwcmVmaXhYb3IgXiBrOyAvLyB0aGlzIGlzIHRoZSByZXF1aXJlZCB4b3IKICAgICAgICAgICAgaWYgKG1hcC5jb250YWluc0tleShjaGVjaykpIHsKICAgICAgICAgICAgICAgIGNvdW50ID0gY291bnQgKyBtYXAuZ2V0KGNoZWNrKTsgCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGZpbmFsbHkgYWRkIHRoaXMgcHJlZml4WG9yIGludG8gdGhlIG1hcAogICAgICAgICAgICBpZiAobWFwLmNvbnRhaW5zS2V5KHByZWZpeFhvcikpIHsKICAgICAgICAgICAgICAgIGludCBvbGQgPSBtYXAuZ2V0KHByZWZpeFhvcik7CiAgICAgICAgICAgICAgICBtYXAucHV0KHByZWZpeFhvciwgb2xkICsgMSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBtYXAucHV0KHByZWZpeFhvciwgMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBjb3VudDsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgaW50W10gYXJyID0gezQsIDIsIDIsIDYsIDR9OwogICAgICAgIGludCBrID0gNjsKICAgICAgICBpbnQgYW5zID0gc3ViYXJyYXlYb3IoYXJyLCBrKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIHN1YmFycmF5cyA9ICIgKyBhbnMpOwogICAgfQp9Cg==