1 条题解

  • 0
    @ 2026-8-28 1:30:46

    题解

    思路

    先确定 nn 位于三角形编号的第几行、该行的第几列。设它位于第 rr 行第 cc 列。向上走到第 qq 行时,所有可能到达的列恰好形成一个连续区间:左端为 max⁡(1,c−(r−q))\max(1,c-(r-q)),右端为 min⁡(q,c)\min(q,c)。

    第 qq 行第 jj 列对应的基数为 q(q−1)/2+jq(q-1)/2+j,罐子编号是这个基数的平方。因此只需对每一行求一个连续平方和。

    做法

    用三角形数定位 r,cr,c。预处理平方前缀和 S(x)=12+22+⋯+x2S(x)=1^2+2^2+\cdots+x^2,或直接使用平方和公式。对于 q=1,2,…,rq=1,2,\ldots,r,计算该行祖先列区间对应的连续基数范围 [L,R][L,R],把 S(R)−S(L−1)S(R)-S(L-1) 加入答案。

    任意倒下的罐都对应从 (r,c)(r,c) 连续向上选择左上或右上父节点得到的位置;走 r−qr-q 步后列偏移可以取连续的全部整数,正好得到上述区间。反之,区间中的每一列都能通过适当安排两种向上移动到达,所以统计既不遗漏也不重复。

    复杂度

    第 rr 行满足 r=O(n)r=O(\sqrt n)。每个测试用例的时间复杂度为 O(n)O(\sqrt n),空间复杂度为 O(1)O(1)。

    • 1

    信息

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