1 条题解

  • 0
    @ 2025-10-28 9:20:54

    题解思路

    1. 问题转化

    m=n(n+1)2m = \frac{n(n+1)}{2},直接枚举所有 i<j<ki < j < k 的复杂度是 O(m3)O(m^3),不可行。

    2. 前缀和表示

    p[0]=0p[0] = 0p[i]=a1+a2++aip[i] = a_1 + a_2 + \dots + a_i,则子区间 [l,r][l, r] 的和为:

    sum(l,r)=p[r]−p[l−1] 其中 1lrn1 \le l \le r \le n,对应 l1[0,n1]l-1 \in [0, n-1]r[l,n]r \in [l, n]

    3. 优化方法

    将数组 bb 排序后,对于固定的 ii,在 ii 之后使用双指针法寻找 j,kj, k 使得:

    bi+bj+bk=0

    具体步骤:

    枚举 ii00m1m-1

    k=m1k = m-1

    枚举 jji+1i+1m1m-1

    计算目标值 target=bibj\text{target} = -b_i - b_j

    移动 kk 使得 bktargetb_k \le \text{target}k>jk > j

    如果 bk=targetb_k = \text{target},统计所有等于 target\text{target}bkb_k 的数量

    这样每个 ii 的枚举中 jj 递增、kk 递减,总复杂度 O(m2)O(m^2)

    4. 复杂度分析

    m=n(n+1)21.25×105m = \frac{n(n+1)}{2} \approx 1.25 \times 10^5n=500n=500

    O(m2)O(m^2)n=500n=500 时约为 1.56×10101.56 \times 10^{10} 次操作,但双指针常数较小,且题目时限较宽松,可以通过。

    • 1

    信息

    ID
    4380
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者