CF2140E

  • 给定下标集合 CC
  • 现有长度为 NN 的石子数量序列 aa,满足对于 1iN1 \leqslant i \leqslant N1aiM1 \leqslant a_i \leqslant M
  • 针对序列 aa 玩 Minimax Game:选择在集合 CC 中的下标 ii,移除第 ii 堆石子。
  • 当游戏结束只剩最后一堆石子时,其对应的石子数量记为 xx
  • Alice 希望最大化 xx,Bob 则希望最小化 xx
  • 在双方均采取最优策略的情况下,求所有 MNM^N 种可能的初始序列 aa 下最终 xx 的总和。
  • N20N \leqslant 20M106M \leqslant 10^6

考虑 M=2M=2,状压当前状态 f0/1,i,sf_{0/1, i, s} 表示现在剩下 ii 堆,状态是 ss,目标是 0/1 的玩家是否必胜,Minimax DP 转移即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vector f(2, vector<int>(1 << N));
f[0][0] = true;
f[1][1] = true;
for (int i = 2; i <= N; i++) {
vector nf(2, vector<int>(1 << N));
for (unsigned s = 0; s < (1 << N); s++) {
for (auto x : good) {
if (x >= i) continue;
unsigned ns = ((s >> (x + 1)) << x) | (s % (1 << x));
nf[0][s] |= !f[1][ns];
nf[1][s] |= !f[0][ns];
}
}
f = move(nf);
}

考虑把 M=2M=211 的意义改写为最终答案 t\geqslant t00 的意义改写为最终答案 <t< t。若某初始状态 ssf1,N,s=1f_{1,N,s} = 1,意味着 Alice 拥有必胜策略,能够将最终结果逼向 11,即最终答案 t\geqslant t

Count(anst)=[f1,N,s=1](Mt+1)popcount(s)×(t1)Npopcount(s)\text{Count}(\text{ans} \geqslant t) = \sum [f_{1,N,s} = 1] (M - t + 1)^{\text{popcount}(s)} \times (t - 1)^{N - \text{popcount}(s)}

答案为

Ans=t=1MCount(anst)\text{Ans} = \sum_{t=1}^M \text{Count}(\text{ans} \geqslant t)