import java.util.*;
public class Main {
public static void main
(String[] args
) { int[] arr = new int[]{4, 2, 2, 6, 4};
int k = 6;
System.
out.
println(countSubarraysWithXOR
(arr, k
)); }
public static int countSubarraysWithXOR(int[] arr, int k) {
Map
<Integer, Integer
> map
= new HashMap
<>();
// Putting a prefix XOR of 0 has occurred once initially
map.put(0, 1);
int currentXOR = 0;
int count = 0;
for (int num : arr) {
// Update the running prefix XOR
currentXOR ^= num;
// Looking for the required prefix XOR value that satisfies the property
int targetXOR = currentXOR ^ k;
// If the target prefix XOR exists, add its frequency to our count
if (map.containsKey(targetXOR)) {
count += map.get(targetXOR);
}
// Record the current prefix XOR frequency in the map
map.put(currentXOR, map.getOrDefault(currentXOR, 0) + 1);
}
return count;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewogICAgICAgIGludFtdIGFyciA9IG5ldyBpbnRbXXs0LCAyLCAyLCA2LCA0fTsKICAgICAgICBpbnQgayA9IDY7CiAgICAgICAgCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGNvdW50U3ViYXJyYXlzV2l0aFhPUihhcnIsIGspKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGludCBjb3VudFN1YmFycmF5c1dpdGhYT1IoaW50W10gYXJyLCBpbnQgaykgewogICAgICAgCiAgICAgICAgTWFwPEludGVnZXIsIEludGVnZXI+IG1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAKICAgICAgICAvLyBQdXR0aW5nIGEgcHJlZml4IFhPUiBvZiAwIGhhcyBvY2N1cnJlZCBvbmNlIGluaXRpYWxseQogICAgICAgIG1hcC5wdXQoMCwgMSk7CiAgICAgICAgCiAgICAgICAgaW50IGN1cnJlbnRYT1IgPSAwOwogICAgICAgIGludCBjb3VudCA9IDA7CiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgbnVtIDogYXJyKSB7CiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcnVubmluZyBwcmVmaXggWE9SCiAgICAgICAgICAgIGN1cnJlbnRYT1IgXj0gbnVtOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gTG9va2luZyBmb3IgdGhlIHJlcXVpcmVkIHByZWZpeCBYT1IgdmFsdWUgdGhhdCBzYXRpc2ZpZXMgdGhlIHByb3BlcnR5CiAgICAgICAgICAgIGludCB0YXJnZXRYT1IgPSBjdXJyZW50WE9SIF4gazsKICAgICAgICAgICAgCiAgICAgICAgICAgIC8vIElmIHRoZSB0YXJnZXQgcHJlZml4IFhPUiBleGlzdHMsIGFkZCBpdHMgZnJlcXVlbmN5IHRvIG91ciBjb3VudAogICAgICAgICAgICBpZiAobWFwLmNvbnRhaW5zS2V5KHRhcmdldFhPUikpIHsKICAgICAgICAgICAgICAgIGNvdW50ICs9IG1hcC5nZXQodGFyZ2V0WE9SKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSBjdXJyZW50IHByZWZpeCBYT1IgZnJlcXVlbmN5IGluIHRoZSBtYXAKICAgICAgICAgICAgbWFwLnB1dChjdXJyZW50WE9SLCBtYXAuZ2V0T3JEZWZhdWx0KGN1cnJlbnRYT1IsIDApICsgMSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBjb3VudDsKICAgIH0KfQo=