使用哈希表 + 枚举二元组的算法。
将四元组 (i,j,p,q) 拆成两部分:
给定一个长度为 n 的整数数组 a1,a2,…,an 与整数 k,请统计满足 ai⊕aj⊕ap⊕aq=k 的四元组数量。为避免重复计数,约定四个下标两两不同且按 i<j<p<q 计数。
每个测试文件均包含多组测试数据。第一行输入一个整数 T(1≤T≤103)代表数据组数,每组测试数据描述如下:
第一行输入两个整数 n,k(4≤n≤103,0≤k≤109)。
第二行输入 n 个整数 a1,a2,…,an(0≤ai≤109)。
所有测试中 ∑n≤4×103。
输出 T 行,第 i 行输出第 i 组数据的答案(满足条件的四元组数量)。
输入
2
4 0
1 2 1 2
5 2
1 1 2 2 3
输出
1
2
说明
第一组数据 n=4,k=0,数组为 [1,2,1,2]。唯一可选四元组下标 (1,2,3,4),异或和 1⊕2⊕1⊕2=0,满足条件,答案为 1。
第二组数据 n=5,k=2,数组为 [1,1,2,2,3]。满足条件的四元组下标为 (1,3,4,5):1⊕2⊕2⊕3=2;(2,3,4,5):1⊕2⊕2⊕3=2。共 2 组,答案为 2。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.