1 条题解
-
0
自动搬运
来自洛谷,原作者为

AsunderSquall
The cruelest fate is to have hope and see it crushed before your eyes.搬运于
2025-08-24 22:34:36,当前版本为作者最后更新于2021-11-17 19:51:51,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
逆转比特
题意
一个点在长为 的 只含有 0/1 的序列上随机游走(下标从 1 开始),点的初始坐标为 ,重复进行以下操作:
-
- 当序列全为一种字符时,停止操作;
-
- 记点当前位置 ,等概率随机选择一个点 ,把点移动到 ,将 处的字符的取反,总代价加上 ,这里 ,其中 是两个给定常数;
-
- 回到第一条。
你需要进行 次修改,具体而言,每次修改包括
-
- 将序列第 位的 0/1 翻转;
-
- 查询初始坐标为 时,停止操作后的期望代价。
注意,一旦修改一直有效。
你需要输出 次询问期望代价模 的结果的异或和。
题解
下述先考虑单组询问, 用 表示
01串, 表示点的位置。算法一
我会暴力高斯消元!
一个显然的做法类似随机游走,在 种状态(
01串形态与点的位置)中列出线性方程组,直接高斯消元解出变量,这样做复杂度 。期望得分:5。
算法二
我会期望的线性性!
上述做法很大的缺陷是状态数太多。注意到 走到 的代价是固定的,并且只与 有关,枚举所有的 计算 的期望次数 ,
$$ans=\sum_{i=1}^n\sum_{j=1}^n[i\neq j]f(|i-j|)E_{i\rightarrow j} $$对于一组,有效信息只有
有效信息可用三元组 表示,只有 种,直接高斯消元,一组 就可以 。冷静一下,所有 不需要分开求,合起来列方程求解就可以,此时总复杂度 。
按照点移到 ,其他位置的 ,其他位置的 四种情况分类讨论转移及系数,具体转移如下:
$$\begin{aligned} f(a, 0, 0)&= \frac{1}{n} f(n - a + 1, 1, 1) + \frac{a - 1}{n} f(a - 1, 0, 0)\\ &+ \frac{1}{n} f(a + 1, 0, 1) + [a < n] \frac{n - a - 1}{n} f(a + 1, 0, 0)\\ f(a, 1, 0)&= \frac{1}{n} f(n - a + 1, 1, 1) + \frac{a - 1}{n} f(a - 1, 0, 0)\\ &+ \frac{1}{n} (f(a + 1, 0, 1) + 1) + [a < n] \frac{n - a - 1}{n} f(a + 1, 0, 0)\\ f(a, 0, 1) &= \frac{1}{n} f(n - a + 1, 1, 0) + \frac{1}{n} f(a - 1, 0, 0)\\ &+ [a > 1]\frac{a - 2}{n} f(a - 1, 0, 1) + \frac{n - a}{n} f(a + 1, 0, 1)\\ f(a, 1, 1) &= \frac{1}{n} f(n - a + 1, 1, 0) + \frac{1}{n} (f(a - 1, 0, 0) + 1)\\ &+ [a > 1]\frac{a - 2}{n} f(a - 1, 0, 1) + \frac{n - a}{n} f(a + 1, 0, 1)\\ \end{aligned} $$(其实这些方括号都是不需要的,因为这些不合法的状态前面系数都为 ,不妨设其值也为 )
由于要做大小为 的矩阵的高斯消元,所以常数很大不能忽略。
期望得分:23。
算法三
我会观察性质!
仔细观察,容易发现,在 不为 的时候,,由此 才是有效的,只有 种。
这个观察非常容易所以没有给这一档部分分。(
$$\begin{aligned} f(a, 0)&= \frac{1}{n} f(n - a + 1, 1) + \frac{a - 1}{n} f(a - 1, 0)\\ &+ \frac{1}{n} f(a + 1, 1) + \frac{n - a - 1}{n} f(a + 1, 0) + \frac{1}{n ^ 2}\\ f(a, 1) &= \frac{1}{n} f(n - a + 1, 0) + \frac{1}{n} f(a - 1, 0)\\ &+ \frac{a - 2}{n} f(a - 1, 1) + \frac{n - a}{n} f(a + 1, 1) + \frac{1}{n ^ 2}\\ \end{aligned} $$除非你是松怪用它过了 Subtask 3)特别的,当 时,没有 项。
记 ,显然只有 的时候该式有意义。
但是考虑到,式子中涉及到 和 前面的系数均为 ,所以不妨设其为 。 两式相减得可以证明 。
证明:
记 为 。
考察 和 的情况,注意到
$$\begin{aligned} ng(k)+g(n+1-k)&=(k-2)g(k-1)+(n-1-k)g(k+1)\\ ng(n+1-k)+g(k)&=(k-2)g(n+2-k)+(n-1-k)g(n-k) \end{aligned} $$两式相减得
稍微整理得好看一点
令 ,我们得到 。
考虑 ,有
可以看出所有 的正负性相同。
考虑到 ,因此只能所有 。 由此证明了 。
思考一个问题,为什么我们列出了一个期望的方程丢进高斯消元里,他一定有解?
因为他的解确实存在,而且我们给出的方程可以描述整个问题。
$$\begin{aligned} ng(a)+g(n-a+1)&=(a-2)g(a-1)+(n-a-1)g(a+1)\\ (n+1)g(a)&=(a-2)g(a-1)+(n-a-1)g(a+1)\\ g(a)&=\dfrac{(a-2)g(a-1)+(n-a-1)g(a+1)}{n+1} \end{aligned} $$这东西看着就很像一个期望的方程组,我们随便给他赋一个组合意义。
比如一个人在 的数轴上随机游走,然后有一定概率往左/往右/螺旋升天。
这个人走到任何一个位置都会获得 的贡献,问从某个位置出发的期望贡献和,答案显然是 。不过其实也可以大眼观察法看出来。
有效状态压缩至 个,设 则有:
$$h_a = \frac{1}{n} h_{n - a + 1} + \frac{a - 1}{n} h_{a-1} +\frac{n - a }{n} h_{a + 1} + \frac{1}{n^2} $$或者也可以对 高斯消元,再回带回 中高斯消元,相当于是解 个 的方程组,常数会大一点,但应该能过 Subtask 3。
期望得分:35。
算法四
考虑一个常见技巧,如果 只与 与 有关,可以把所有变量表示为 的形式,列出一个等式求出,从而推出全部 上面的式子中 还与 有关,有关系的点连边之后形成梯子状结构。
以下是 时的一个例子:
类似上面做法,设 ,将 表示为 的形式,列出两个线性无关的额外方程解出 。值得注意的是这个方法在 的时候会出问题,这就是为什么数据范围中 。
预处理已经可以线性,考虑询问。
$$\begin{aligned} ans &= \sum_{i = 1} ^ n \sum_{j=1, j \neq i}^n f(|i - j|) \cdot E_{i\rightarrow j}\\ &= \sum_{i = 1} ^ n \sum_{j = 1, j \neq i} ^ n f(|i - j|) \cdot ([p = i]\frac{1}{n} + h(\sum_{k = 1} ^ n [s_i = s_k])) \end{aligned} $$需要注意如果 全部相等需要加特判,由于大数据随机不到所以选择了添加子任务依赖关系。
预处理 ,单次询问做到 不成问题。
至此,复杂度 ,期望得分:100。
> -
- 1
信息
- ID
- 7207
- 时间
- 1000~2000ms
- 内存
- 512MiB
- 难度
- 7
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者