0%

CF2152D Division Versus Addition

题意简述

给定一个长度为 $m$ 的数组 $b=[b_1,b_2,\ldots,b_m]$,其中 $b_i \geq 2$。定义一个双人博弈:

  • 两人轮流操作,Poby 先手。
  • Poby 操作:选择某个 $b_i \ge 2$,将其替换为 $\left\lfloor \dfrac{b_i}{2} \right\rfloor$。
  • Rekkles 操作:选择某个 $b_i \ge 2$,将其替换为 $b_i+1$。
  • 当所有元素都变为 $1$ 时游戏结束。

得分 = Poby 操作次数。Poby 目标是最小化得分,Rekkles 目标是最大化得分。

定义数组 $b$ 的为双方最优操作时的得分。

现在给定一个数组 $a$($a_i \ge 2$),有 $q$ 次区间查询 $(l,r)$,需要求出区间 $[a_l,\ldots,a_r]$ 的值。


思路分析

关键问题:Rekkles 在哪些数上操作才是有效的?

  1. $2$ 的幂
    • 如果 $a_i=2^k$,它的二进制展开全是 $1000\ldots0$,Rekkels 的操作会完全被 Poby 抹除。
    • Rekkles 在这里完全无从下手,不能制造额外负担。
  2. 形如 $2^k+1$ 的数
    • 首先,如果某个数的二进制末位是 $1$,Rekkles 将它加一会产生进位,使得 Poby 最终必须额外多一步来抹掉这一位。
    • 形如 $2^k+1$ 的数更加重要一些,因为 Rekkles 一旦错过它,就再也没机会使 Poby 操作次数增加了。
    • 因此,只要这种数存在,Rekkles 就要尽可能多地抢到它。
    • 同样,Poby 不会一直跟随 Rekkles 在同一个数上操作,否则必然吃亏,所以他会尽早将这些数消掉。于是这类数里,最多只有一半能被 Rekkles利用。
  3. 普通数(既不是 $2^k$ 也不是 $2^k+1$)
    • 如果 Rekkles 对它加一,Poby 下一步直接就能把 Rekkles 的增量抹掉,相当于无效操作。
    • 因此 Rekkles 应该等待 Poby 消除出来一个末位为 $1$ 的数字。
    • 所以这类数一定可以被 Rekkles 操作出来一个最高位进位,从而使 Poby 多一次操作。

最终结论

设区间 $[a_l,\ldots,a_r]$ 内:

  • $A =$ 形如 $2^k$ 的数的个数;
  • $B =$ 形如 $2^k+1$ 的数的个数;
  • $C =$ 其他数的个数。

那么答案为:

即:基础操作次数 + 来自 $2^k+1$ 的额外贡献 + 来自“普通数”的额外贡献。