Luogu P6689 序列
Luogu 月赛 1C P6689 序列
给定 \(N,K\),初始有一个长度为 \(N\) 的字符串 \(S\) 为全 (
,进行若干次操作直到 \(K=0\)
- 在 \([1,N]\) 中随机一个数,将此位置上的括号取反。
- 如果本次随机使得
(
的数量减少了 \(1\),那么给 \(K\) 减 \(1\)
求最长合法括号序列的期望。
\(\rm Sol:\)
先做一点预处理,我们发现,如果知道最后序列中被翻转了 \(k\) 个的概率,那么出现在每个位置的概率都是相同的。
考虑通过 dp 来统计这个问题,我们发现 )
的每次增加都意味着 \(K\) 减少了 \(1\),于是不妨设 \(f_{i,j}\) 表示当前 \(K=i\),且序列中有 \(j\) 个 )
的概率,那么转移仅有两种:\(j\) 变小,或者 \(i\) 变小且 \(j\) 变大。
接下来考虑序列中有 \(k\) 个 )
的情况下最长合法括号序列长度的期望。
我们不妨假定我们已经知道了序列的模样,我们如何计算其最长括号序列,我们给所有左括号赋权值 \(1\),右括号赋权值 \(−1\),令 \(𝑠_𝑖\) 表示权值的前缀和,那么这个括号序列的最长合法括号子序列长度为 \(𝑛−𝑠_𝑛+2\min 𝑠_𝑖\)
不妨考虑 \(\min\{𝑠_𝑖 \}\) 对应的位置 \(𝑥\),在此之前的右括号比左括号多 \(−𝑠_𝑥\) 个,那么必然有这么多个右括号不能匹配,而剩下的括号都是能互相匹配的,否则就会出现更小的 \(𝑠_𝑖\)
同理,\(𝑥\) 之后恰好有 \(𝑠_𝑛−𝑠_𝑥\) 个左括号不能匹配,去掉这些不能匹配的括号,剩下的就是最长合法括号子序列。
于是我们等价于统计:\(p\times \sum ( 𝑛−𝑠_𝑛+2\min 𝑠_𝑖)\)
我们首先肯定要枚举 R 括号的数量 \(x\),此时贡献可以表示为 \(n-s_n+2\min s_i\),其中 \(s_n\) 可以视为 \(n-2x\),于是只需要考虑 \(\sum \min s_i\),所以等价于算 \(2\sum (x+\min s_i)\)
本质上可以将他视为期望,将最小值取个反,我们不妨统计 \(\sum P(X> i)\),那么 \(P(X> i)\) 可以视为最小值的绝对值 \(> i\) 的概率,不妨对于每个 \(i\) 统计有多少方案数满足最小值的绝对值 \(>i\),然后系数为 \(-1\) 所以减去即可 。
假定枚举的最小值为 \(-k\),那么我们将 L,R 的填放视为坐标系上的移动,那么将 L 视为 \(y\) 轴,R 视为 \(x\) 轴,于是有 \(L-R\ge -k\),构造直线 \(y=x-k\),我们发现大于等价于在坐标系上移动不经过此直线。
枚举 R 数量后我们可以知道目标位置的坐标为 \((x,y)\),枚举 \(k\) 之后,我们只需要统计有多少条路径从 \((0,0)\) 出发不经过直线 \(y=x-k\),不妨进行对称,那么等价于从 \((0,0)\) 出发并到达的方案数减去 \((k,-k)\) 出发到达的方案数之差,即 \(\binom{n}{x}-\binom{n}{x-k}\)。
预处理组合数,复杂度为 \(\mathcal O(NK+N^2)\)
实际上可以不差分,直接统计最小值大于 \(x-1\) 与大于 \(x\) 的数量差值即可。