【题解】P8850 | 推式子

题意题面陈述很清楚了。但是这个大蒜无炮真的很强(?)


Tag : 推式子 解方程 最优化问题

一般最优化问题要求答案取模有以下两种情况:

1.有通用的,固定的最优方案结论。

2.答案可以用能够储存的实数表示出来(分母分子不含有较大组合数或阶乘)。

对于这道题,因为没有一种显然的最优策略,所以我们猜测后者。


考虑如何计算一个点到另一个点的期望次数

(感觉这个问题莫名的典,但我好像又没做过)

令一个 长 $n$ 的环上一对相隔 $i$ 个点的点的期望操作次数为 $f(i) ,i\in[0,n]$

显然有以下结论

$$f(0) = 0$$

$$f(i) = f(n-i) $$

拆开$$f(i) = \frac{f(i-1)+f(i+1)}{2} +1$$

上式可转化为

$$f(i+1)=2f(i)-f(i-1)-2$$

$$f(i) = 2f(i-1)-f(i-2)-2 \ \ (i>1)$$

发现这是一个环形的方程组,令 $$f(1) = x$$

$$f(2) = 2f(1) -f(0) - 2 = 2x - 2$$

$$f(3) = 2f(2) - f(1) - 2= 3x - 6$$

$$f(4) = 2f(3) - f(2) - 2 =4x - 12$$

$$\dots$$

$$f(k) = kx - k^2+k$$


如果你不想知道我是怎么发现这个规律的,请跳过这几行。

其实是这样的:

$$ \begin{bmatrix} f(i) & f(i-1) & 1 \end{bmatrix} =\begin{bmatrix} f(i - 1) & f(i-2) & 1 \end{bmatrix} \times \begin{bmatrix} 2&1&0\\ -1&0&0\\ 2&0&1\\ \end{bmatrix} $$

在脑袋中运行 Brain++ 语言,发现这个矩阵的 $k - 1$ 次方等于

$$ \begin{bmatrix} f(k) & f(k-1) & 1 \end{bmatrix} = \begin{bmatrix} f(1) & f(0) & 1 \end{bmatrix} \times \begin{bmatrix} k&1&0\\ -k+1&-k+2&0\\ k^2-k&k^2-3k+2&1\\ \end{bmatrix} $$

其实有时候用矩阵打表找规律很方便。


代入最开始的等式

$$f(n-1)=(n-1)x-(n-1)(n-2) = f(1)=x$$

$$x = n - 1$$

$$f(i) = i (n-i)$$

于是我们就得到了这个优美的,没有分数的结论。


如何选择使得答案最优?

令 $ans(p)$ 为选 $p$ 做终点行时的答案。

$$ans(p) = \sum_{i=1}^n f(\left|p - i\right|)\times ai $$

拆开绝对值和 $f$ 得到

$$ans(p)=\sum_{i=1}^p i^2\times a_i +(2p-n)\sum_{i=1}^p i\times a_i +(pn -p^2)\sum_{i=1}^pa_i + \sum_{i=p+1}^n i^2\times a_i +(2p+n)\sum_{i=p+1}^n i\times a_i -(pn +p^2)\sum_{i=p+1}^n a_i $$

用 int128 维护 $a_i , a_i\times i,a_i\times i^2$ 的前缀和即可解决。

全部取 min 后再取模。


code

不是很理解考场上为啥做出来的人这么少。

虽然我并没有打

posted @ 2022-11-15 20:54  寂静的海底  阅读(1)  评论(0编辑  收藏  举报  来源