Luogu P6689 序列

Luogu 月赛 1C P6689 序列

给定 \(N,K\),初始有一个长度为 \(N\) 的字符串 \(S\) 为全 (,进行若干次操作直到 \(K=0\)

  1. \([1,N]\) 中随机一个数,将此位置上的括号取反。
  2. 如果本次随机使得 ( 的数量减少了 \(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\) 的数量差值即可。

posted @ 2020-09-11 20:22  Soulist  阅读(438)  评论(0)    收藏  举报