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$ 枚铜牌 ...
随机推荐
- 每周分享五个 PyCharm 使用技巧(六)
大家好,今天我又来给大家更新 PyCharm 的使用技巧. 从今年3月24号开始一直到今天,将近四个月的时间.包括本篇,一共更新了6篇文章,每篇 5 个小技巧,总计 30 个. 这30个使用技巧,全部 ...
- UML类图的几种关系总结
本文摘自:UML类图关系总结 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregati ...
- HTTP协议复习三--TCP/IP的网络分层模型和OSI 网络分层模型
TCP/IP网络分层模型 第一层叫“链接层”(link layer),负责在以太网.WiFi这样的底层网络上发送原始数据包,工 作在网卡这个层次,使用MAC地址来标记网络上的设备,所以有时候也叫MAC ...
- TypeScript_泛型
typescript 中很多地方都和 java 和 C# 相似,如果 有 java 和 C# 的同学入手typeScript 会简单很多, 下面这里使用代码来表示和展现泛型的定义和使用 //泛型:在类 ...
- Vue.js源码中大量采用的ES6新特性介绍:模块、let、const
1 关于ES6 ECMAScript6(以下简称ES6)是JavaScript语言的最新一代标准,发布于2015年6月,因为ECMA委员会决定从ES6起每年更新一次标准,因此ES6被改名为E ...
- idea中添加多级父子模块
在 IntelliJ IDEA 中,没有类似于 Eclipse 工作空间(Workspace)的概念,而是提出了Project和Module这两个概念. 在 IntelliJ IDEA 中Projec ...
- Linux kernel buffer ring
参考:What are the concepts of “kernel ring buffer”, “user level”, “log level”? Ring Buffer 原始问题 个人补充:r ...
- 基于k8s集群部署prometheus监控etcd
目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...
- Java volatile关键字实现原理
场景引入 可见性问题 先来看一张图: 上面的图,是简化版的Java内存模型,一个线程有自己的工作内存,同时还有一个共享的主内存. 线程1和线程2读取数据data时,先从主内存里加载data变量的值到工 ...
- 使用dos创建一个maven项目
创建一个maven项目既可以使用eclipse创建,也可以使用dos命令,此文介绍使用dos界面创建一个maven项目 1.win+R输入cmd,打开dos界面 2.cd到你想创建项目的目录(默认都是 ...