[CF1396B] Stoned Game

首先我们要观察出来一个显然的必胜态,设 S=aiS=\sum a_i,如果存在一个 ai>S2a_i>\cfrac{S}{2},那么先手只要一直选 aia_i 就能够获胜了,接下来我们来看 i,aiS2\forall i,a_i\le \cfrac{S}{2} 的情况。

由于每个人都不会想给对面留下一个 i,ai>S2\exists i,a_i>\cfrac{S}{2} 的局面(因为这样对面必胜),所以每一步必然就会尝试使得 i,aiS2\forall i,a_i'\le \cfrac{S'}{2}

实际上也确实可以做到这一点:只要每次给最大的 aia_i 拿走 11 即可,可以分为最大值有 11 个和 2\ge 2 个简单讨论得出。

既然 ai,aiS2\forall a_i,a_i\le \cfrac{S}{2},所以每一步必然会有至少两个堆,所以答案只与 SS 的奇偶性相关。

[CF1451D] Circle Game

由于局面是高度对称的,所以我们可以往对称轴上来思考。

观察圆内最远能到达的直线 y=xy=x 上的点 (mk,mk)(mk,mk),即 2m2k2d22m^2k^2\le d^2 并且 2(m+1)2k2>d22(m+1)^2k^2>d^2,我们来看 ((m+1)k,mk)((m+1)k,mk) 是否在圆内。

  1. ((m+1)k,mk)((m+1)k,mk) 不在圆内,那么对称地 (mk,(m+1)k)(mk,(m+1)k) 也不在,于是 (mk,mk)(mk,mk)PP 态。

    那么 ((m1)k,mk)((m-1)k,mk)NN 态,(mk,(m1)k)(mk,(m-1)k) 也是 NN 态,就能推出 ((m1)k,(m1)k)((m-1)k,(m-1)k)PP 态。

    以此类推,(0,0)(0,0)PP 态。

  2. ((m+1)k,mk)((m+1)k,mk) 在圆内,那么它不可能向上走,那能不能向右?((m+2)2+m2)k2>2(m+1)2k2>d2((m+2)^2+m^2)k^2>2(m+1)^2k^2>d^2,所以也不能向右,则 ((m+1)k,mk)((m+1)k,mk)PP 态,对称地 (mk,(m+1)k)(mk,(m+1)k) 也是 PP 态,于是 (mk,mk)(mk,mk)NN 态。

    因为 (mk,(m+1)k)(mk,(m+1)k)PP 态,则 ((m1)k,(m+1)k)((m-1)k,(m+1)k)NN 态,于是 ((m1)k,mk)((m-1)k,mk)PP 态,则 ((m1)k,(m1)k)((m-1)k,(m-1)k)NN 态。

    以此类推,(0,0)(0,0)NN 态。

[CF2006A] Iris and Game on the Tree

显然我们可以把这个 01\texttt{01}10\texttt{10} 看作这个串的 0/1\texttt{0}/\texttt{1} 切换时权值会 +1/1+1/-1,于是如果最后一个字符和第一个字符相同,那么这个点的权(前面提到的权值的绝对值)是 00,否则是 11,这就和中间节点无关了。

  1. 如果根不是 ?\texttt{?},那么每个人都会尽量把叶子染成自己希望的那个颜色,设未定的叶子个数是 mm,那么答案就是既定权值 +m/2+\lceil m/2\rceil

  2. 如果根是 ?\texttt{?},设未定的叶子个数是 mm

    • 如果既定的 0011 数量 x0,x1x_0,x_1 不等,设基础权值是 min(x0,x1)\min(x_0,x_1),那先手总可以用一步定根获得 x0x11|x_0-x_1|\ge 1 的收益,如果选叶子的收益 1\le 1,所以一定会先定根,即答案是 max(x0,x1)+m/2\max(x_0,x_1)+\lfloor m/2\rfloor
    • 如果既定的 0011 数量 x0,x1x_0,x_1 相等,那么定根的收益就是 00 了。如果此时某人选了一个未定的叶子,就会导致对方定根的收益为 11,这是我们不希望的;所以我们会选不是未定叶子也不是根的未定节点,直到必须定根,那么答案就是 x0+(m+y)/2x_0+\lfloor (m+y)/2\rfloor,其中 yy 是不是未定叶子也不是根的节点的未定节点数量模 22

具体的证明过程如下:

  1. 不妨设根为 11,叶子颜色为 00 的有 L0L_0 个,同理 L1,L?L_1,L_{?},再设 I?I_? 是中间的未定节点数量。

    VI(L0,L?,I?)V_I(L_0,L_?,I_?) 为 Iris 先手时最终得分,VDV_D 同理,那么状态转移:

    VI(L0,L?,I?)=max{VD(L0+1,L?1,I?)L?1VD(L0,L?,I?1)I?1V_I(L_0,L_?,I_?)=\max \begin{cases} V_D(L_0+1,L_?-1,I_?)\quad &L_?\ge 1\\ V_D(L_0,L_?,I_?-1)\quad &I_?\ge 1\\ \end{cases}

    同理,VDV_D 的转移如下:

    VD(L0,L?,I?)=min{VI(L0,L?1,I?)L?1VI(L0,L?,I?1)I?1V_D(L_0,L_?,I_?)=\min\begin{cases} V_I(L_0,L_?-1,I_?)\quad &L_?\ge 1\\ V_I(L_0,L_?,I_?-1)\quad &I_?\ge 1 \end{cases}

    我们来用数学归纳法证明 L?+I?L_?+I_? 为任意自然数时,都有 VI(L0,L?,I?)=L0+L?/2V_I(L_0,L_?,I_?)=L_0+\lceil L_?/2\rceilVD(L0,L?,I?)=L0+L?/2V_D(L_0,L_?,I_?)=L_0+\lfloor L_?/2\rfloor

    L?+I?=0L_?+I_?=0 时,显然成立,接下来我们进行归纳步:

    对于 VIV_I,我们有:

    VI(L0,L?,I?)=max{L0+1+L?12,L0+L?2}=L0+L?2\begin{aligned} V_I(L_0,L_?,I_?)&=\max\left\{L_0+1+\left\lfloor\frac{L_?-1}{2}\right\rfloor,L_0+\left\lfloor\frac{L_?}{2}\right\rfloor\right\}\\ &=L_0+\left\lceil\frac{L_?}{2}\right\rceil \end{aligned}

    对于 VDV_D,我们有:

    VD(L0,L?,I?)=min{L0+L?12,L0+L?2}=L0+L?12=L0+L?2\begin{aligned} V_D(L_0,L_?,I_?)&=\min\left\{ L_0+\left\lceil \frac{L_?-1}{2}\right\rceil,L_0+\left\lceil\frac{L_?}{2}\right\rceil\right\}\\ &=L_0+\left\lceil\frac{L_?-1}{2}\right\rceil\\ &=L_0+\left\lfloor\frac{L_?}{2}\right\rfloor \end{aligned}

    证毕。

  2. 如果根没有被定,那么我们的状态就应当包含 L0,L1,L?,I?L_0,L_1,L_?,I_? 了,因为我们总是可以选择下一步是否定根,定根之后就有直接的公式可以计算,所以是否定根可以给我们一个下界。

    说起来比较抽象,写成公式的话,就是:

    VI(L0,L1,L?,I?)=max{VD(L0,L?,I?)=L0+L?/2VD(L1,L?,I?)=L1+L?/2VD(L0,L1,L?,I?1)VD(L0+1,L1,L?1,I?)VD(L0,L1+1,L?1,I?)V_I(L_0,L_1,L_?,I_?)=\max\begin{cases} V_D(L_0,L_?,I_?)=L_0+\lfloor L_?/2\rfloor\\ V_D(L_1,L_?,I_?)=L_1+\lfloor L_?/2\rfloor\\ V_D(L_0,L_1,L_?,I_?-1)\\ V_D(L_0+1,L_1,L_?-1,I_?)\\ V_D(L_0,L_1+1,L_?-1,I_?) \end{cases}

    同理,对于 VDV_D,我们有:

    VD(L0,L1,L?,I?)=min{VI(L0,L?,I?)=L0+L?/2VI(L1,L?,I?)=L1+L?/2VI(L0,L1,L?,I?1)VI(L0+1,L1,L?1,I?)VI(L0,L1+1,L?1,I?)V_D(L_0,L_1,L_?,I_?)=\min\begin{cases} V_I(L_0,L_?,I_?)=L_0+\lceil L_?/2\rceil\\ V_I(L_1,L_?,I_?)=L_1+\lceil L_?/2\rceil\\ V_I(L_0,L_1,L_?,I_?-1)\\ V_I(L_0+1,L_1,L_?-1,I_?)\\ V_I(L_0,L_1+1,L_?-1,I_?) \end{cases}

    也就是说,起码可以列出不等式:

    VD(L0,L1,L?,I?)min(L0,L1)+L?/2VI(L0,L1,L?,I?)max(L0,L1)+L?/2V_D(L_0,L_1,L_?,I_?)\le \min(L_0,L_1)+\lceil L_?/2\rceil\\ V_I(L_0,L_1,L_?,I_?)\ge \max(L_0,L_1)+\lfloor L_?/2\rfloor

    1. L0L1L_0\neq L_1 时,我们总可以证明直接定根是更优的,即,II 做出别的选择不会比直接定根更优,因为:

      max{other choice}max{min(L0,L1)+L?2min(L0+1,L1)+L?12min(L0,L1+1)+L?12\max\{\text{other choice}\}\le \max\begin{cases} \min(L_0,L_1)+\lceil\frac{L_?}{2}\rceil\\ \min(L_0+1,L_1)+\lceil\frac{L_?-1}{2}\rceil\\ \min(L_0,L_1+1)+\lceil\frac{L_?-1}{2}\rceil\\ \end{cases}

      简单讨论就可以知道不会更优,所以一定会直接定根,即 VI(L0,L1,L?,I?)=max(L0,L1)+L?/2V_I(L_0,L_1,L_?,I_?)=\max(L_0,L_1)+\lfloor L_?/2\rfloor,同理 VD(L0,L1,L?,I?)=min(L0,L1)+L?/2V_D(L_0,L_1,L_?,I_?)=\min(L_0,L_1)+\lceil L_?/2\rceil

    2. L0=L1=LL_0=L_1=L 时,不难发现如果使用了上面五行情况的最后两行,对面是可以直接套用我们得出的公式的,写出来化简后会发现前两行的值和后两行的值完全相等,所以此时的状态只剩下了 I?I_? 一种,即:

      VI(I?)=max{L+L?/2,VD(I?1)}VD(I?)=min{L+L?/2,VI(I?1)}\begin{aligned} V_I(I_?)&=\max\{L+\lfloor L_?/2\rfloor,V_D(I_?-1)\}\\ V_D(I_?)&=\min\{L+\lceil L_?/2\rceil,V_I(I_?-1)\} \end{aligned}

      关键点其实就是要看我们能不能逼迫 VDV_D 给出 L+L?/2L+\lceil L_?/2\rceil,容易发现这只与 I?I_? 的奇偶性有关,证明可以用数学归纳法,所以双方能拿 I?I_? 会尽可能地拿 I?I_?

[CF1404B] Tree Tag

首先,我们来证明一个树上的结论:minu(maxvd(u,v))=D/2\min_u(\max _vd(u,v))=\lceil D/2\rceil,其中 D=maxu(maxvd(u,v))D=\max_u(\max_v d(u,v))

为什么?我们首先来构造出一个 maxvd(u,v)=D/2\max_v d(u,v)=\lceil D/2\rceil 的情况,接下来我们证明不能比它更小。

  1. a,ba,b 是某个直径的两个端点,我们只需要 a,ba,b 的中点作为 uu,即可使得 maxvd(u,v)=D/2\max_v d(u,v)=\lceil D/2\rceil,于是 minumaxvd(u,v)D/2\min_u \max_v d(u,v)\le \lceil D/2\rceil

  2. 如果存在一个 uu,使得 maxvd(u,v)<D/2\max_v d(u,v)<\lceil D/2\rceil,那么我们考虑任意一个直径的两个端点 (a,b)(a,b),会有 d(u,a)+d(u,b)2D/22d(u,a)+d(u,b)\le 2\lceil D/2\rceil-2,根据三角不等式,我们有 d(a,b)d(u,a)+d(u,b)2D/22d(a,b)\le d(u,a)+d(u,b)\le 2\lceil D/2\rceil-2

    • 如果 DD 是偶数,那么 d(a,b)2D22=D2d(a,b)\le 2\cfrac{D}{2}-2=D-2,矛盾;
    • 如果 DD 是奇数,那么 d(a,b)2D+122=D1d(a,b)\le 2\cfrac{D+1}{2}-2=D-1,矛盾。

    因此这样的 uu 不可能存在,所以 minumaxvd(u,v)=D/2\min_u \max_v d(u,v)=\lceil D/2\rceil

然后我们来看这道题目,考虑如下几种特殊的情况:

  1. 如果一开始 d(a,b)dad(a,b)\le d_a,那么一步就可以抓住;

  2. 如果存在一个点 uu,使得 maxvd(u,v)da\max_v d(u,v)\le d_a,那么只要把 aa 移动到 uu 就可以抓住,根据前文的讨论,这等价于 minumaxvd(u,v)=D/2da\min_u\max_v d(u,v)=\lceil D/2\rceil\le d_a

  3. 否则,无论 aa 跳到哪里,总会存在一个点 vv 使得 d(u,v)>dad(u,v)>d_a,即 aa 够不到,此时只要能保证 bb 总是能跳到这样的点上,就永远抓不住 bb

    怎么判断 bb 总是能够跳到这样的点上?我们不妨把每次的 aa 看作根,那么最坏的情况下,bb 需要先跳到根,再跳到这样的节点上,那么这一次的跳跃需要的 db>2dad_b>2d_a

    如果满足 db>2dad_b>2d_a,我们就总能逃脱 aa 的攻击范围;否则,每一次以 aa 为根建树时,bb 都不能跳到上面 dad_a 层中去,我们只需要让 aa 步步紧逼 bb 总能把 bb 逼到它不得不向根跳的情况。

[CF1383B] GameGame

无论他们如何选择,我们能够确定的是两人得分 X,YX,Y 的异或和 XY=SX\oplus Y=S 是一个定值,当 S=0S=0 时,一定是平局。

否则,我们需要从 SS 的特点下手,从高位向低位看:

  1. 如果 SS 的当前位是 00,说明 X,YX,Y 只能是同时为 1100
  2. 如果 SS 的当前位是 11,说明 X,YX,Y 必然有一个 11 和一个 00

所以我们只需要关心 SS 的最高的为 11 的位,这一位为 11aia_i 数量为奇数,为 00aia_i 数量不确定,我们需要进行讨论。

  1. 00 的数量是偶数,
    1. 11 的数量是 4k+14k+1,先手只需要拿一个 11,然后模仿后手操作,就可以使得先手有 2k+12k+111,所以先手必胜。
    2. 11 的数量是 4k+34k+3,后手模仿先手操作,就可以逼迫先手有 2k+22k+211,所以先手必败。
  2. 00 的数量是奇数,
    1. 11 的数量是 4k+34k+3,先手可以拿走一个 00,给后手必败的局面,所以先手必胜。
    2. 11 的数量是 4k+14k+1
      • 如果先手拿 00,那么给后手必胜局面,不行;
      • 如果先手拿 11,此时后手拿 11 就会给先手必胜局面,后手拿 00 先手可以再拿 11 给后手必败局面,所以先手必胜。

[CF1770D] Koxia and Game

由于每一个位置只有三个元素,不妨讨论互不相同元素的个数:

  1. 若有超过两个元素相同,那么 Koxia 可以逼迫 Mahiru 选择这个元素;
  2. 若所有元素互不相同,则 Mahiru 在这个位置至少有两种不同的选择。

如果存在一个位置所有元素互不相同,Mahiru 有 x,yx,y 两种选择,那么如果 Koxia 可以逼迫 Mahiru 选择 {1,2,,n}{x}\{1,2,\dots,n\} -\{x\},那么存在一个位置有两个 yy,Mahiru 只要在这一步选择时选 yy 即可。

补充:如果前面已经选了 yy,Mahiru 这一步选 yy 已经胜利;如果后面

所以 Koxia 必须每一次操作都剩下两个相同的元素,所以我们对 a,ba,b 分情况讨论:

  1. 如果 ai=bia_i=b_i,那么这里一定会让他选择 aia_i,所以 cic_i 的取值是任意的;
  2. 如果 aibia_i\neq b_i,既然这里是二选一,这种问题可以映射到给一个无向图的边定方向。

最终能够成一个排列,等价于每一个点的入度为 11,那么既然这个图 nn 个点 nn 条边,这个图必须构成基环树森林。

对于无向边,细节少的处理方式是用并查集来做,每一个点都必须在一个有且仅有一个环的连通块中,这是容易维护的。

对于一个普通的环,答案是乘 22;自环乘 nn,因为 cic_i 的选择无关紧要。

[CF2207D] Boxed Like a Fish

首先考虑是一条链的情况,手推不难发现,如果两端的叶子距离 k+1\le k+1,则 Cyndaquil 胜,否则 Cyndaquil 败。

推广到一般情况,我们首先找到所有的叶子,把它们涂黑,然后我们可以重复下面的步骤:枚举所有的黑色点对,如果它们之间的距离 k+1\le k+1,则把这一整条路径都涂黑。

这个复杂度预估一下是 O(n3)O(n^3),显然是错误的,但是它的正确性是没有毛病的:链的结论告诉我们,只要两个叶子距离 k+1\le k+1,那么这条路径上的所有点都是必胜点;进一步地,只要两个必胜点之间的距离 k+1\le k+1,那么这条新路径上的所有点也是必胜点。

基于这个思想,我们可以考虑进行树上 DP。

我们以 vv 为根建树,设 TuT_u 是节点 uu 对应的子树,设 dpudp_u 表示在 TuT_uuu 到最近黑色节点的距离,初始化叶子结点 dpleaf=0dp_{leaf}=0,然后对于中间节点 uu 来说,如果它在 TuT_u 中的黑色节点,那么应当存在一条跨过它的由黑色节点构成的长度 k+1\le k+1 的路径,这对应着 dpc1+dpc2+2k+1dp_{c_1}+dp_{c_2}+2\le k+1,其中 c1,c2c_1,c_2uu 的子节点中 dpdp 值最小的两个点;否则,黑色节点应当在 uu 的子树中,即 dpc1+1dp_{c_1}+1