Codeforces Round #604 (Div. 1) - 1C - Beautiful Mirrors with queries
题意
给出排成一列的 \(n\) 个格子,你要从 \(1\) 号格子走到 \(n\) 号格子之后(相当于 \(n+1\) 号格子),一旦你走到 \(i+1\) 号格子,游戏结束。 当你在 \(i\) 号格子时,你有 \(p_i\) 的概率走到 \(i+1\) 号格子,否则你会返回最近的一个 checkpoint (存档点),最近的存档点是指 \(max\{x|x\leq i \; and \; ischeckpoint(x)\}\) 。对于每个 \(query x\) ,会把 \(x\) 号格子的 checkpoint 属性翻转,然后输出此时从 \(1\) 号格子走到 \(n+1\) 号格子的期望步数。
题解
考虑没有 checkpoint 的情况,也就是 2E 的题意。此时有两种比较好的解法:
设 \(dp_i\) 表示从 \(1\) 号格子开始,第一次走到 \(i\) 号格子所需的期望步数,则 \(dp_1=0\) ,所求为 \(dp_{n+1}\) 。
对于 \(i+1\) 号格子,走到它有两种可能:成功,从 \(i\) 号格子转移;失败,从 \(1\) 号格子转移。
\[dp_{i+1}=p_i(1+dp_i)+(1-p_i)(1+dp_i+dp_{i+1})\]化简,即
\[dp_{i+1}=\frac{1}{pi}(1+dp_i)\]递推可以求解。
设 \(dp_i\) 表示从 \(i\) 号格子开始,第一次走到 \(n+1\) 号格子所需的期望步数,则 \(dp_{n+1}=0\) ,所求为 \(dp_{1}\) 。
对于 \(i\) 号格子,下一步有两种可能:成功,转移到 \(i+1\) 号格子;失败,转移到 \(1\) 号格子。
\[dp_i=p_i(dp_{i+1}+1)+(1-p_i)(1+dp_1)\]则有
\[dp_{n+1}=0\]
\[dp_n=p_n(dp_{n+1}+1)+(1-p_n)(1+dp_1)\]
\[dp_{n-1}=p_{n-1}(dp_n+1)+(1-p_{n-1})(1+dp_1)\]
\[dp_{n-2}=p_{n-2}(dp_{n-1}+1)+(1-p_{n-2})(1+dp_1)\]
...
\[dp_3=p_3(dp_4+1)+(1-p_3)(1+dp_1)\]
\[dp_2=p_2(dp_3+1)+(1-p_2)(1+dp_1)\]
\[dp_1=p_1(dp_2+1)+(1-p_1)(1+dp_1)\]每次把上一个式子代到下一个式子,会使得整个式子只带有 \(dp_1\) 一个未知项,最后把 \(dp_1\) 解出来就可以了。
那么加上 checkpoint ,解法出现了一些变化,只说看起来比较好的第一种。
设 \(dp_i\) 表示从 \(1\) 号格子开始,第一次走到 \(i\) 号格子所需的期望步数,则 \(dp_1=0\) ,所求为 \(dp_{n+1}\) 。
对于 \(i+1\) 号格子,走到它有两种可能:成功,从 \(i\) 号格子转移;失败,从 \(x\) 号格子转移, \(x\) 表示 \(i\) 对应的 checkpoint。
根据期望的线性性,可得 \(cost(x,y)=dp_y-dp_x\) ,表示从 \(x\) 号格子转移到 \(y\) 号格子的花费为两式的差。
\[dp_{i+1}=p_i(1+dp_i)+(1-p_i)(1+dp_i+cost(x,i+1))\]
化简,即
\[dp_{i+1}=\frac{1}{p_i}(1+dp_i-(1-p_i)dp_{x})\]
\[dp_{i+1}=\frac{1}{p_i}(1+dp_i+(p_i-1)dp_{x})\]
\[dp_{i+1}=\frac{1}{p_i}+dp_{x}+\frac{1}{p_i}dp_i-\frac{1}{p_i}dp_{x}\]
注意到一开始是没有任何 checkpoint 的(就算有也可以逐个添加进来),先按照 2E 的方法解决好。然后插入第一个 checkpoint \(x\) ,那么显然不比 \(x\) 大的都是不受影响的。
第一个受影响的点即 \(x+1\) :
\[dp_{x+1}=\frac{1}{p_x}(1+dp_x-(1-p_x)dp_{x})\]
化简,即
\[dp_{x+1}=\frac{1}{p_x}+dp_{x}\]
第二个受影响的点即 \(x+2\) (第一种化简格式):
\[dp_{x+2}=\frac{1}{p_{x+1}}(1+dp_{x+1}-(1-p_{x+1})dp_{x})\]
代入,即
\[dp_{x+2}=\frac{1}{p_{x+1}}(1+\frac{1}{p_x}+dp_{x}-(1-p_{x+1})dp_{x})\]
化简,即
\[dp_{x+2}=\frac{1}{p_{x+1}}(1+\frac{1}{p_x}+p_{x+1}dp_{x})\]
化简,即
\[dp_{x+2}=\frac{1}{p_{x+1}}+\frac{1}{p_x p_{x+1}}+dp_{x}\]
代入第三种化简格式,检验成立
第三个受影响的点即 \(x+3\) (第三种化简格式):
\[dp_{x+3}=\frac{1}{p_{x+2}}+dp_{x}+\frac{1}{p_{x+2}}dp_{x+2}-\frac{1}{p_{x+2}}dp_{x}\]
代入,即
\[dp_{x+3}=\frac{1}{p_{x+2}}+dp_{x}+\frac{1}{p_{x+2}}(\frac{1}{p_{x+1}}+\frac{1}{p_x p_{x+1}}+dp_{x})-\frac{1}{p_{x+2}}dp_{x}\]
化简,即
\[dp_{x+3}=\frac{1}{p_{x+2}}+\frac{1}{p_{x+1} p_{x+2}}+\frac{1}{p_x p_{x+1} p_{x+2}}+dp_{x}\]
假设保存有 \(p_i\) 的逆元 \(invp_i\) ,那么这个修改就相当于每个元素依次加上一个前缀积。
Codeforces Round #604 (Div. 1) - 1C - Beautiful Mirrors with queries的更多相关文章
- Codeforces Round #604 (Div. 2) E. Beautiful Mirrors
链接: https://codeforces.com/contest/1265/problem/E 题意: Creatnx has n mirrors, numbered from 1 to n. E ...
- Codeforces Round #604 (Div. 2) E. Beautiful Mirrors 题解 组合数学
题目链接:https://codeforces.com/contest/1265/problem/E 题目大意: 有 \(n\) 个步骤,第 \(i\) 个步骤成功的概率是 \(P_i\) ,每一步只 ...
- Codeforces Round #604 (Div. 2) D. Beautiful Sequence(构造)
链接: https://codeforces.com/contest/1265/problem/D 题意: An integer sequence is called beautiful if the ...
- Codeforces Round #604 (Div. 2) C. Beautiful Regional Contest
链接: https://codeforces.com/contest/1265/problem/C 题意: So the Beautiful Regional Contest (BeRC) has c ...
- Codeforces Round #604 (Div. 2) B. Beautiful Numbers
链接: https://codeforces.com/contest/1265/problem/B 题意: You are given a permutation p=[p1,p2,-,pn] of ...
- Codeforces Round #604 (Div. 2) A. Beautiful String
链接: https://codeforces.com/contest/1265/problem/A 题意: A string is called beautiful if no two consecu ...
- Codeforces Round #604 (Div. 2) A. Beautiful String(贪心)
题目链接:https://codeforces.com/contest/1265/problem/A 题意 给出一个由 a, b, c, ? 组成的字符串,将 ? 替换为 a, b, c 中的一个字母 ...
- Codeforces Round #604 (Div. 2) B. Beautiful Numbers(双指针)
题目链接:https://codeforces.com/contest/1265/problem/B 题意 给出大小为 $n$ 的一个排列,问对于每个 $i(1 \le i \le n)$,原排列中是 ...
- Codeforces Round #604 (Div. 2) C. Beautiful Regional Contest(贪心)
题目链接:https://codeforces.com/contest/1265/problem/C 题意 从大到小给出 $n$ 只队伍的过题数,要颁发 $g$ 枚金牌,$s$ 枚银牌,$b$ 枚铜牌 ...
随机推荐
- Linux下Java变量
一.JAVA_HOME.PATH.CLASSPATH详解 1.1.JAVA_HOME 指向jdk安装目录,该目录下有bin.lib目录.Eclipse/NetBeans/Tomcat等软件就是通过搜索 ...
- 笔谈I帧、P帧、B帧、PTS、DTS(一)
做视频的播放,涉及到关键帧一说,从视频流中取出数据显示图像的时候,这些一幅幅图像之间到底有什么关联呢.那就有必要弄清楚I帧.P帧.B帧.PTS.DTS的概念,文章 I,P,B帧和PTS,DTS的关系 ...
- [LeetCode] 72. 编辑距离 ☆☆☆☆☆(动态规划)
https://leetcode-cn.com/problems/edit-distance/solution/bian-ji-ju-chi-mian-shi-ti-xiang-jie-by-labu ...
- js 数组的深度拷贝 的四种实现方法
首先声明本人资质尚浅,本文只用于个人总结.如有错误,欢迎指正.共同提高. --------------------------------------------------------------- ...
- python 笔记二
17.进程线程 进程间通信方式:管道Pipe:队列Queue:共享内存Value.Array.Manager: 多进程同步:锁Lock.递归锁RLock.Condition(条件变量):事件event ...
- Springboot默认定时任务——Scheduled注解
1.pom配置 <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...
- 【转】如何使用jupyter编写数学公式(译)
[1.如何使用jupyter编写数学公式(译)][1] [1]: https://www.jianshu.com/p/93ccc63e5a1b
- Android笔记(四十一) Android中的数据存储——SQLite(三)select
SQLite 通过query实现查询,它通过一系列参数来定义查询条件. 各参数说明: query()方法参数 对应sql部分 描述 table from table_name 表名称 colums s ...
- kubernetes 集群添加node节点
kubernetes 集群添加node节点 注意,我们并不需要把新增的node ip加入到证书里重新生成!!! 下面我们以添加node03为例 一.添加集群里个节点的hostname并设置好对应主机名 ...
- ssh本机失败(ssh: connect to host localhost port 22: Connection refused)
ssh本机失败(ssh: connect to host localhost port 22: Connection refused) 一. 问题描述 之前一直在服务上使用宝塔面板, 今天突发奇想, ...