像潮落潮涌,送我奔向自由。|

寂静的海底

园龄:3年2个月粉丝:59关注:15

【题解】P8850 | 推式子

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


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

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

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

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

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


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

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

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

显然有以下结论

f(0)=0

f(i)=f(ni)

拆开f(i)=f(i1)+f(i+1)2+1

上式可转化为

f(i+1)=2f(i)f(i1)2

f(i)=2f(i1)f(i2)2  (i>1)

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

f(2)=2f(1)f(0)2=2x2

f(3)=2f(2)f(1)2=3x6

f(4)=2f(3)f(2)2=4x12

f(k)=kxk2+k


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

其实是这样的:

[f(i)f(i1)1]=[f(i1)f(i2)1]×[210100201]

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

[f(k)f(k1)1]=[f(1)f(0)1]×[k10k+1k+20k2kk23k+21]

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


代入最开始的等式

f(n1)=(n1)x(n1)(n2)=f(1)=x

x=n1

f(i)=i(ni)

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


如何选择使得答案最优?

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

ans(p)=i=1nf(|pi|)×ai

拆开绝对值和 f 得到

ans(p)=i=1pi2×ai+(2pn)i=1pi×ai+(pnp2)i=1pai+i=p+1ni2×ai+(2p+n)i=p+1ni×ai(pn+p2)i=p+1nai

用 int128 维护 ai,ai×i,ai×i2 的前缀和即可解决。

全部取 min 后再取模。


code

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

虽然我并没有打

posted @   寂静的海底  阅读(5)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起