1 条题解
信息
- ID
- 4380
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者
设 m=2n(n+1),直接枚举所有 i<j<k 的复杂度是 O(m3),不可行。
令 p[0]=0,p[i]=a1+a2+⋯+ai,则子区间 [l,r] 的和为:
sum(l,r)=p[r]−p[l−1] 其中 1≤l≤r≤n,对应 l−1∈[0,n−1],r∈[l,n]。
将数组 b 排序后,对于固定的 i,在 i 之后使用双指针法寻找 j,k 使得:
bi+bj+bk=0
具体步骤:
枚举 i 从 0 到 m−1
令 k=m−1
枚举 j 从 i+1 到 m−1:
计算目标值 target=−bi−bj
移动 k 使得 bk≤target 且 k>j
如果 bk=target,统计所有等于 target 的 bk 的数量
这样每个 i 的枚举中 j 递增、k 递减,总复杂度 O(m2)。
m=2n(n+1)≈1.25×105 当 n=500
O(m2) 在 n=500 时约为 1.56×1010 次操作,但双指针常数较小,且题目时限较宽松,可以通过。