题意

给出排成一列的 \(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 的题意。此时有两种比较好的解法:

  1. 设 \(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)\]

    递推可以求解。

  2. 设 \(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的更多相关文章

  1. 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 ...

  2. Codeforces Round #604 (Div. 2) E. Beautiful Mirrors 题解 组合数学

    题目链接:https://codeforces.com/contest/1265/problem/E 题目大意: 有 \(n\) 个步骤,第 \(i\) 个步骤成功的概率是 \(P_i\) ,每一步只 ...

  3. Codeforces Round #604 (Div. 2) D. Beautiful Sequence(构造)

    链接: https://codeforces.com/contest/1265/problem/D 题意: An integer sequence is called beautiful if the ...

  4. Codeforces Round #604 (Div. 2) C. Beautiful Regional Contest

    链接: https://codeforces.com/contest/1265/problem/C 题意: So the Beautiful Regional Contest (BeRC) has c ...

  5. 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 ...

  6. Codeforces Round #604 (Div. 2) A. Beautiful String

    链接: https://codeforces.com/contest/1265/problem/A 题意: A string is called beautiful if no two consecu ...

  7. Codeforces Round #604 (Div. 2) A. Beautiful String(贪心)

    题目链接:https://codeforces.com/contest/1265/problem/A 题意 给出一个由 a, b, c, ? 组成的字符串,将 ? 替换为 a, b, c 中的一个字母 ...

  8. Codeforces Round #604 (Div. 2) B. Beautiful Numbers(双指针)

    题目链接:https://codeforces.com/contest/1265/problem/B 题意 给出大小为 $n$ 的一个排列,问对于每个 $i(1 \le i \le n)$,原排列中是 ...

  9. Codeforces Round #604 (Div. 2) C. Beautiful Regional Contest(贪心)

    题目链接:https://codeforces.com/contest/1265/problem/C 题意 从大到小给出 $n$ 只队伍的过题数,要颁发 $g$ 枚金牌,$s$ 枚银牌,$b$ 枚铜牌 ...

随机推荐

  1. NEST 增删改查

    /// <summary> /// HEAD /employee/employee/1 /// </summary> public void DocumentExists() ...

  2. 14 Scroll 滚动搜索

      Scroll的用法: 第一次搜的时候,要指定 快照保留时间1min,分页的大小:2条/页: 对于第一次搜索,ES会返回一个这个scroll的id: 下次再搜的时候,就带着这个scrollid去搜就 ...

  3. JS中BOM和DOM常用的事件

    总结:window对象 ● window.innerHeight - 浏览器窗口的内部高度 ● window.innerWidth - 浏览器窗口的内部宽度 ● window.open() - 打开新 ...

  4. Androidx初尝及其新旧包对照表

    x的最低实验条件 AndroidStudio 3.2.0+ gradle:gradle-4.6以上 本次实验条件: AndroidStudio 3.3 (强制要求最低gradle版本为gradle-4 ...

  5. 朴素贝叶斯算法源码分析及代码实战【python sklearn/spark ML】

    一.简介 贝叶斯定理是关于随机事件A和事件B的条件概率的一个定理.通常在事件A发生的前提下事件B发生的概率,与在事件B发生的前提下事件A发生的概率是不一致的.然而,这两者之间有确定的关系,贝叶斯定理就 ...

  6. phpmyadmin教程

    phpmyadmin教程 管理页进入phpmyadmin 打开C:\wamp\apps\phpmyadmin3.5.1下的配置文件:config.inc 修改密码创建与修改数据库.数据表 字段类型 I ...

  7. Linux关闭防火墙、设置端口

    关闭防火墙 1)重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 验证防火墙是否关闭:chkconfig --list |grep ...

  8. java 实现 单链表

    class Node{ public int val; public Node next; public Node(int val){ this.val=val; } } class LinkList ...

  9. Spring -09 -在Spring工程 中加载 properties 文件 -为某个属性添加注解赋初值

    1.在src 下新建 xxx.properties 文件,不要任意加空格,注明jdbc等标识名!2.在spring 配置文件中先引入xmlns:context,在下面添加2.1如果需要记载多个配置文件 ...

  10. 均分纸牌(Noip2002)

    1320:[例6.2]均分纸牌(Noip2002) 时间限制: 1000 ms         内存限制: 65536 KB提交数: 3537     通过数: 1839 [题目描述] 有n堆纸牌,编 ...