题目
https://codefun2000.com/ide/P4009?pset=zijie
https://codefun2000.com/ide/P5522?pset=zijie
思路

code(ACM)
java
import java.util.*;
class Main{
public static void main(String args[]){
Scanner sc=new Scanner(System.in);
long n=sc.nextLong();
long k=sc.nextLong();
long arr[]=new long [(int)n];
for (int i = 0; i < n; i++) {
arr[i]=sc.nextLong();
}
long sum=0;
long pre[]=new long[(int)n+1];//从1开始计数
HashMap<Long,Long> map=new HashMap<>();
map.put(0L,1L);
for(int i=0;i<n;i++){
pre[i+1]=pre[i]+arr[i];
sum= sum + map.getOrDefault(pre[i+1]-k,0L);//查找 pre[i+1]-k 出现了多少次。
map.put(pre[i+1], map.getOrDefault(pre[i+1],0L)+1L);//记录当前前缀和 pre[i+1] 出现了多少次。
}
System.out.print(sum);
}
}
java
import java.util.*;
class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
long k = sc.nextLong();
long arr[] = new long[(int)n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextLong();
}
long sum = 0;
long pre[] = new long[(int)n + 1]; // 从1开始计数
HashMap<Long, Long> map = new HashMap<>();
map.put(0L, 1L);
for (int i = 0; i < n; i++) {
pre[i + 1] = pre[i] ^ arr[i];
sum = sum + map.getOrDefault(pre[i + 1] ^ k, 0L);
map.put(pre[i + 1],
map.getOrDefault(pre[i + 1], 0L) + 1L);
}
System.out.print(sum);
}
}