Loading

6.21 CW 模拟赛 T4. 上课

思路

考虑 \(G = 1\)
因为进入顺序是不确定的, 怎么计算期望呢?

首先先列出期望相关的柿子

\[ \begin{gather*} E = \sum_{i = 1}^{n} \sum_{j = i + 1}^{n} \begin{cases} 1/2 & (\overrightarrow{i} \land \overrightarrow{j}) \lor (\overleftarrow{i} \land \overleftarrow{j}) \\ 1 & \overleftarrow{i} \land \overrightarrow{j} \\ 0 & \overrightarrow{i} \land \overleftarrow{j} \\ \end{cases} \end{gather*}\]

这里用了个性质, 在 \(n!\) 个排列中 \(a\)\(b\) 之前和 \(a\)\(b\) 之后的概率都为 \(1/2\)

考虑对这个东西找 \(\min\)
不难发现当 \(\leftarrow, \rightarrow\) 数量确定为 \(x, y\) 时, \(1/2\) 的数量是确定的, 而剩下的显然尽量让 \(\rightarrow\) 在前, \(\leftarrow\) 在后, 这样只会产生 \(\overrightarrow{i} \land \overleftarrow{j}\), 不会产生 \(\overleftarrow{i} \land \overrightarrow{j}\) 一定最优
剩下的就是显然的了, 关键在于观察出 \(\rightarrow\) 在前, \(\leftarrow\) 在后

考虑正解
很显然是要计算 \(c(\mathbb{S}, i)\) 表示 \(\mathbb{S}\) 中的组已经就坐, 现在要把第 \(i\) 组塞进去的最小花费

这咋做呢, 发现我们的期望变得更加复杂了
不妨转化为状态 \(s_i\), \(\leftarrow\)\(1\), \(\rightarrow\)\(0\), 已经被占据的为 \(2\), 没有被占据且当前坐不到的不产生贡献, 那么我们的期望就变成了

\[ \begin{gather*} E = \sum_{i = 1}^{n} \sum_{j = i + 1}^{n} \begin{cases} 1/2 & s_i = s_j \\ 1 & (s_i = 1, s_j = 0) \lor (s_i = 2, s_j = 0) \lor (s_i = 1, s_j = 2) \\ 0 & s_i = 0, s_j = 1 \\ \end{cases} \end{gather*} \]

怎么办呢?
我们拆分成两个部分
一个是 \(0, 1\) 之间的贡献, 显然和上面的过程是一样的
另一个是 \(0, 2\)\(1, 2\) 之间的贡献, 因为我们拆完贡献之后还是没啥关系, 所以不能用上面的方法
但是我们可以使用调整法, 如果状态不是 \(0000\cdots 0011 \cdots 1111\) 这样的, 我们一定可以调整成这样显然不劣

所以最终的解的形式是确定的, 一定是位置靠前的一部分人向右走, 靠后一部分人向左走


破防专用分界线

考虑这个神人结论的思维链
首先明确期望概念中的「概率」在这里只和进入的 \(n!\) 个顺序有关, 我们要安排的是一个具体的每人从左边或是右边进入

首先考虑 \(G = 1\), 也就是最初板凳上是没有人的, 且一个组坐完所有板凳
这种情况下 \(i, j\) 产生尴尬值的情形只有如下几种, 不妨钦定 \(i < j\)

  • \(i\)\(j\) 先落座, \(j\) 向右走
  • \(j\)\(i\) 先落座, \(i\) 向左走

不难发现在一共 \(n!\) 种情况中, \(i\)\(j\) 先落座和 \(j\)\(i\) 先落座的次数是相当的
所以任何两个位置 \(i, j\), 只要 \(j\) 向右走就会产生 \(1/2\) 的模糊尴尬值, 只要 \(i\) 向左走就会产生 \(1/2\) 的模糊尴尬值

所以最终的模糊尴尬值为

\[\sum_{i = 1}^{n} \frac{n - i}{2} \times [\overrightarrow{i}] + \frac{i - 1}{2} \times [\overleftarrow{i}] \]

两个部分分别是作为 \(i, j\) 的贡献
\(\rm{tm}\) 还能不会就不是人类了, 我想不用多说了

考虑 \(G \neq 1\), 现在我们要引入组的顺序, 显然等价于计算 \(c(\mathbb{S}, o)\) 表示组 \(\mathbb{S}\) 已经坐好, 现在要把第 \(o\) 组坐进去的最小花费

这种情况下 \(i, j\) 产生尴尬值的情形会稍有变化

  • \(i\)\(j\) 先落座/\(i \in \mathbb{S}\), \(j\) 向右走
  • \(j\)\(i\) 先落座/\(j \in \mathbb{S}\), \(i\) 向左走

\(\textrm{pre}_i\) 表示 \(i\) 之前有多少位置在 \(\mathbb{S}\) 中, \(\textrm{suf}_i\) 表示 \(i\) 之后有多少位置在 \(\mathbb{S}\)
现在的模糊尴尬值为\((\)\(|i|\) 表示 \(i\) 是组中的第几个元素, \(|o|\) 表示组的大小\()\)

\[c(\mathbb{S}, o) = \sum_{i \in o} \left(\textrm{pre}_i + \frac{|i| - 1}{2}\right) \times [\overrightarrow{i}] + \left(\textrm{suf}_i + \frac{|o| - |i|}{2}\right) \times [\overleftarrow{i}] \]

考虑我们计算 \(c(\mathbb{S}, o)\) 的时间
因为转移 \(\mathcal{O} (G2^G)\), 复杂度要在 \(\mathcal{O} (G\log n)\) 左右, 总复杂度才能在 \(\mathcal{O} (G^22^G\log n)\), 扎不多德勒

而这个柿子显然可以找到一个合适的分界线, 也就是当 \(\textrm{pre}_i + \frac{|i| - 1}{2} \leq \textrm{suf}_i + \frac{|o| - |i|}{2}\) 时, 我们会选择 \(i\) 向右走, 否则选择 \(i\) 向左走
找到分解线之后, 剩下的可以快速计算, 就不赘述了

总结

拆贡献技巧: 总的贡献往往可以拆成每个对的贡献之和
拆贡献技巧: 对的贡献往往可以拆成每个点在关于它的所有对的贡献之和

当整体的贡献难以取 \(\min\) 时, 往往可以让每个个体取到 \(\min\), 其一定对应全体的 \(\min\)

posted @ 2025-07-09 11:57  Yorg  阅读(4)  评论(0)    收藏  举报