1 条题解

  • 0
    @ 2026-8-28 1:33:42

    题解

    思路

    若要在第 kik_i 秒造成至少 hih_i 点伤害,最省的方式一定包含连续施法区间

    [ki−hi+1, ki],[k_i-h_i+1,\ k_i],

    其伤害依次为 1,2,…,hi1,2,\ldots,h_i。多个需求区间若相交,就必须合并成一个更长的连续施法区间;互不相交的区间之间可以把伤害重置为 11。

    长度为 xx 的连续区间耗费

    1+2+⋯+x=x(x+1)2.1+2+\cdots+x=\frac{x(x+1)}2.

    做法

    按出现时刻从后向前扫描。维护当前合并段的左右端点 [L,R][L,R]。对于怪物 ii,令 S=ki−hi+1S=k_i-h_i+1:

    • 若 ki≥Lk_i\ge L,它与当前段相交,令 L=min⁡(L,S)L=\min(L,S);
    • 否则,结算当前段的三角数,并新建区间 [S,ki][S,k_i]。

    扫描结束后再结算最后一段。

    极小时间轴子任务可以逐秒维护“上一秒伤害”并枚举不施法、重置为 11、增加为 x+1x+1 三种动作。若所有需求区间互不相交,则直接把每个 hih_i 的三角数相加。

    正确性证明

    任一怪物的最后 hih_i 次连续递增伤害构成区间 [ki−hi+1,ki][k_i-h_i+1,k_i],因此任何合法方案都必须覆盖所有这些区间。

    相交区间不能用一次伤害重置分开,否则共同覆盖部分之后无法在两个终点同时达到所需伤害;把它们合并为一个连续递增段恰能满足全部需求。互不相交的合并段之间重置伤害只会减少法力,因此各段独立取从 11 开始的递增序列最优。

    算法准确求出所有需求区间的并集连通段,并对每段加入其最小三角数代价,故总和就是全局最小法力。

    复杂度分析

    每个测试用例时间复杂度为 O(n)O(n),空间复杂度为 O(1)O(1)(不计输入数组)。

    • 1

    信息

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