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计算特定条件下的四元组数量/