304计算特定条件下的四元组数量
题解
该题目要求在给定数组中找到满足条件 a[i] + a[j] = a[k] ^ a[l] 且 i < j < k < l 的四元组数量。由于答案可能非常大,需要对 10^9 + 7 取模。
解题思路
枚举所有可能的
(i, j)对:- 对于每个 数对
a[i]和a[j](i < j),计算a[i] + a[j]的值,并将其存储在字典d中,并记录对应a[j]的下标 - 对字典
d中每个键对应的列表进行排序,以便后续使用二分查找。
- 对于每个 数对
枚举所有可能的
(k, l)对:- 对于每个
(k, l),满足k < l,计算a[k] ^ a[l]的值。寻找是否存在(i, j)满足a[i] + a[j] = a[k] ^ a[l]且j < k。 - 使用
bisect_left在d[a[k] ^ a[l]]中找到满足j < k的j的数量,并累加到结果res中。
- 对于每个
代码
1 | |
复杂度分析
- 时间复杂度:
O(n^2logn)- 枚举
(i, j)对需要O(n^2)时间。 - 对每个
(k, l)对进行二分查找需要 O(log n) 时间,总体为O(n^2logn)。
- 枚举
- 空间复杂度:
O(n^2)- 用于存储所有
(i, j)对的和。
- 用于存储所有
304计算特定条件下的四元组数量
https://kongshuilinhua.github.io/2024/12/31/304计算特定条件下的四元组数量/