[ARC164D]1D Coulomb 题解

[ARC164D]1D Coulomb 题解

题意

在长为 \(2N\) 的数轴上放有 \(2N\) 个小球,第 \(i\) 个小球在坐标 \(i\) 的位置。 \(2N\) 个小球中有 \(N\) 个小球带正电,有 \(N\) 个小球带负点。记第 \(i\) 个小球带 \(a_i\) 单位电荷(\(a_i\in\{1,-1\}\)),小球之间受到力的作用,第 \(i\) 个小球受到的力的大小 \(F_i=(\sum_{j=1}^{i-1}a_j-\sum_{j=i+1}^{2N}a_j)\times a_i\)。小球会进行运动,运动规则如下:

  1. \(F_i>0\) 时第 \(i\) 个小球以每单位时间 \(1\) 单位长度的速度匀速向右运动。
  2. \(F_i<0\) 时第 \(i\) 个小球以每单位时间 \(1\) 单位长度的速度匀速向左运动。
  3. \(i\) 号球和 \(j\) 号球在某一时刻出现在同一位置并且 \(a_i\not=a_j\)\(i\) 号球和 \(j\) 号球同时消失,记第 \(i\) 个球在坐标 \(x_i\) 处消失。

分析可知不会有三个小球同时出现在同一个位置,并且最终所有小球均会消失。

现在给出一个长为 \(2N\) 的字符串,当第 \(i\) 个字符为 \(\texttt{+}\) 时表示 \(a_i=1\),第 \(i\) 个字符为 \(\texttt{-}\)\(a_i=-1\),第 \(i\) 个字符为 \(\texttt{?}\) 时表示 \(a_i\) 不确定。对于所有合法的可能的小球的电性情况求出 \(\sum_{i=1}^{2N}\left |i-x_i\right |\) 的值的和,答案对 \(998244353\) 取模。

\(N\le 3000\)

题解

先考虑没有问号时如何统计答案:

由于两个小球 \(i,j\) 当且仅当在 \(a_i+a_j=0\) 时相撞才会消失,所以小球的消失对于其他小球受力的大小无影响,也就是说小球运动的方向在消失之前不变。

进一步分析可以发现,小球之间的相撞消失类似于括号匹配,例如:

++----+-+-++

这个序列可以分成两段恰好电荷和为 \(0\) 的子段:

++--,--+-+-++

对于第一段我们将 \(\texttt{+},\texttt{-}\) 分别视作 \(\texttt{(},\texttt{)}\)。对于第二段我们将 \(\texttt{+},\texttt{-}\) 分别视作 \(\texttt{)},\texttt{(}\)。然后就可以匹配了,具体地:\(1-4,2-3,5-12,6-7,8-9,10-11\) 分别进行匹配。

形式化地来说:我们首先将整个序列划分成若干个不相交的极小的电荷和为 \(0\) 的子段,然后对于每一个子段 \(s_{l\cdots r}\),将 \(s_l\) 这种字符视为 \(\texttt{(}\),另一种字符(即 \(s_r\) 这种字符)视为 \(\texttt{)}\),然后进行括号匹配,匹配上的两个小球相撞消失。那么答案就是所有配对的小球的坐标差的和。

分析完了相撞的性质,考虑怎样统计答案更方便。直接统计不好做。所以套路的改变求和方式,我们考虑 \([i,i+1]\) 这个单位长度被多少对配对的小球经过,记为 \(f_i\)。换句话说 \(f_i\) 就是前 \(i\) 个球与后 \(n-i\) 个球配对的对数,观察可以发现:

\[f_i=\left|\sum_{i=1}^{i}a_i\right| \]

那么答案就是 \(\sum_{i=1}^{2N-1}\left|\sum_{j=1}^{i}a_i\right|\)

以上是对于没有 \(\texttt{?}\) 的情况的答案的计算,下面说一下有 \(\texttt{?}\) 了怎么做。

我们设 \(g_{i,j}\) 表示 \(\sum_{k=1}^{i}a_k=j\) 的方案数,那么答案就是:

\[\sum_{i=1}^{2N-1}\sum_{j=-N}^{N}g_{i,j}\times \left|j\right| \]

\(g_{i,j}\) 可以组合数计算,具体地:

当前 \(i\) 个字符中有 \(x\)\(\texttt{+}\)\(y\)\(\texttt{-}\)\(z\)\(\texttt{?}\)。整个字符串中有 \(X\)\(\texttt{+}\)\(Y\)\(\texttt{-}\)\(Z\)\(\texttt{?}\),那么就有:

\[g_{i,(x+k)-(y+z-k)}=\binom{z}{k}\binom{Z}{N-X-k} \]

其中 \(k\) 是枚举 \(z\)\(\texttt{?}\) 中有 \(k\)\(\texttt{?}\) 电荷量为正。

本题到这里就结束了,复杂度 \(\mathcal{O}(n^2)\)代码很短

posted @ 2023-10-25 22:04  _zyc  阅读(15)  评论(1编辑  收藏  举报