[吐槽]

  首先当然是要orzyww啦

  以及orzyxq奇妙顺推很强qwq

  嗯。。怎么说呢虽然说之前零零散散做了一些概d的题目但是总感觉好像并没有弄得比较明白啊。。(我的妈果然蒟蒻)

  这题的话可以说是难得的一道搞得比较清楚的概d题目吧记录一下还是挺有意思的ovo

  当然咯。。显然考场上并没有推出来。。嗯qwq

[题解]

  看到说要求期望的距离,然后总的长度又被分成了一段一段的(各个事件)

  所以就有一个比较直接的想法:将每一段期望走的次数算出来然后再乘上每一段的距离,加起来就是答案啦

  那么现在问题来了怎么求期望走的次数

  

  考虑定义 

       $e_i$:第i个到第i+1个事件中间这段路程的经过次数的期望

  $f_i$:第i个事件发生后走到h,并且i到i+1中间这段路程只经过了一次的概率

  根据定义我们可以得到:

  $e_i=\frac{1}{f_i}$

  (然而为啥要这样搞呢。。嗯个人的理解是如果直接求期望会比较麻烦但是概率的话相对来说比较好写转移方程)

  考虑转移

  【奇妙套路】嗯概d的题目一般反着推会比较友善至于原因是啥。。还得求教各位dalao。。

  所以这题我们也反着推咯

  首先记第i+1个事件发生的概率为p,那么第i+1个事件有两种不同的情况:

  1.打怪

  如果说第i+1个事件要打怪,因为这段只能经过一次,所以显然打怪必须成功

  (否则肯定会回到前面去,那么i到i+1就会经过不止一次了)

  所以得到:i+1=X的话,$f_i=f_{i+1}*p$

  2.插旗

  但是如果说第i+1个事件是插旗,就会比较复杂了

  因为现在只要求i到i+1这段经过1次,对后面的情况并没有限制,所以i+1以及后面的都可以经过很多次

  换句话来说就是:只要第i+1这个位置插旗成功,后面的无论爆炸了多少次都没有关系,因为最前只能回到i+1这个位置

  

  后面被打回来的概率的话,因为被打回来了所以显然i+1到i+2经过了不止一次,那么一次被打回来的概率就是$1-f_{i+1}$

  然后无论被打回来了多少次,最后一次肯定是要走到终点去的,所以最后要乘一个$f_{i+1}$

  

  那么我们就可以得到:

  i+1==F的话$f_i=f_{i+1}+p*(1-f_{i+1})*f_{i+1}+(p*(1-f_{i+1}))^2*f_{i+1}+(p*(1-f_{i+1}))^3*f_{i+1}+...+(p*(1-f_{i+1}))^n*f_{i+1}$

  (爆炸0次+爆炸1次+爆炸2次+...+爆炸n次)

  这里$n\to\infty$

  

  考虑怎么算

  但是发现插旗的情况,式子十分不友善。。所以就整理一下

  先将$f_{i+1}$提出来得到:

  $f_i=f_{i+1}*(1+p*(1-f_{i+1})+(p*(1-f_{i+1}))^2+(p*(1-f_{i+1}))^3+...+(p*(1-f_{i+1}))^n)$

  然后发现后面的一堆其实是这种形式:

  $1+x+x^2+x^3+...+x^n$

  我们记这个式子ans为a

  那么$a*x=x+x^2+x^3+...x^{n-1}$

  两式相减一下整理得到:

  $a=\frac{1-x^n-1}{1-x}$

  注意到,这里我们的x是一个概率,所以是小于1的,而$n\to\infty$,所以$x^{n-1}$是一个特别小的数可以直接忽略

  所以得到:$a=\frac{1}{1-x}$

  (mark:嗯有空可以去研究一下泰勒展开之类的)

  然后就可以带进去算啦,得到:

  $f_i=f_{i+1}*\frac{1}{1-p*(1-f_{i+1})}$

  考虑转成e[i]的转移方程

  手头上两条式子:

  i+1打怪:$f_i=f_{i+1}*p$

  i+1插旗:$f_i=f_{i+1}*\frac{1}{1-p*(1-f_{i+1})}$

  将$e_i=\frac{1}{f_i}$带进去得到:

  打怪:$e_i=\frac{e_{i+1}}{p}$

  插旗:$e_i=(1-p)*e_{i+1}+p$

  随后乘一下什么的算算答案就好

  (所以说为啥这题我写了这么长的题解。。很迷啊。。果然太菜qwq)

[坑点]

  除法的话用逆元就好啦

  但是要多% (不然怕是要被续)

[update]

  今天重新写了一下这道题然后== 弱智二连qwq

  首先第一个是。。在求距离差的时候忘记取模了== 第二个是。。不能直接用$f$(也就是概率)来算,因为。。可能出现被$0$除的情况,所以我们还是需要转成期望来算qwq

  这个故事告诉我们没事不要把算的东西放到分母去搞不好就翻了QwQ

 #include<iostream>
#include<cstdio>
#include<cstring>
#define MOD 1000000007
#define ll long long
using namespace std;
const int MAXN=1e5+;
ll e[MAXN],p[MAXN],dis[MAXN];
char op[MAXN];
ll ans;
ll n,m;
ll ksm(ll x,int b);
ll inv(ll x); int main()
{
char s[];
ll x,y;
scanf("%lld%lld",&n,&m);
for (int i=;i<=m;++i)
{
scanf("%s%lld%lld%lld",s,&dis[i],&x,&y);
x=x%MOD;
y=y%MOD;
p[i]=x*inv(y)%MOD;
op[i]=s[];
}
e[m]=;
for (int i=m-;i>=;--i)
{
if (op[i+]=='X')
e[i]=(e[i+]*inv(p[i+]))%MOD;
else
e[i]=((((+MOD-p[i+])%MOD)*e[i+])%MOD+p[i+])%MOD;
}
dis[]=; dis[m+]=n;
for (int i=;i<=m;++i)
ans=(ans+(((dis[i+]-dis[i])%MOD)*e[i])%MOD)%MOD;
printf("%lld\n",ans);
} ll ksm(ll x,int b)
{
ll ret=,base=x;
while (b)
{
if (b&) ret=(ret*base)%MOD;
base=(base*base)%MOD;
b>>=;
}
return ret;
} ll inv(ll x)
{
return ksm(x,MOD-);
}

【2016北京集训测试赛】azelso的更多相关文章

  1. 2016北京集训测试赛(十)Problem A: azelso

    Solution 我们把遇到一个旗子或者是遇到一个敌人称为一个事件. 这一题思路的巧妙之处在于我们要用\(f[i]\)表示从\(i\)这个事件一直走到终点这段路程中, \(i\)到\(i + 1\)这 ...

  2. 【2016北京集训测试赛(十)】 Azelso (期望DP)

    Time Limit: 1000 ms   Memory Limit: 256 MB Description 题解 状态表示: 这题的状态表示有点难想...... 设$f_i$表示第$i$个事件经过之 ...

  3. 【2016北京集训测试赛(二)】 thr (树形DP)

    Description 题解 (这可是一道很早就碰到的练习题然后我不会做不想做,没想到在Contest碰到欲哭无泪......) 题目大意是寻找三点对的个数,使得其中的三个点两两距离都为d. 问题在于 ...

  4. 【2016北京集训测试赛(八)】 crash的数列 (思考题)

    Description 题解 题目说这是一个具有神奇特性的数列!这句话是非常有用的因为我们发现,如果套着这个数列的定义再从原数列引出一个新数列,它居然还是一样的...... 于是我们就想到了能不能用多 ...

  5. 【2016北京集训测试赛(十六)】 River (最大流)

    Description  Special Judge Hint 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. 题解 题目大意:给定两组点,每组有$n$个点,有若干条跨组 ...

  6. 【2016北京集训测试赛】river

    HINT 注意是全程不能经过两个相同的景点,并且一天的开始和结束不能用同样的交通方式. [吐槽] 嗯..看到这题的想法的话..先想到了每个点的度为2,然后就有点不知所措了 隐隐约约想到了网络流,但并没 ...

  7. [2016北京集训测试赛17]crash的游戏-[组合数+斯特林数+拉格朗日插值]

    Description Solution 核心思想是把组合数当成一个奇怪的多项式,然后拉格朗日插值..:哦对了,还要用到第二类斯特林数(就是把若干个球放到若干个盒子)的一个公式: $x^{n}=\su ...

  8. [2016北京集训测试赛15]statement-[线段树+拆环]

    Description Solution 由于题目要求,将a[i]->b[i](边权为i)后所得的图应该是由森林和环套树组合而成. 假如是树形结构,所有的t[i]就直接在线段树t[i]点的dfs ...

  9. [2016北京集训测试赛5]小Q与内存-[线段树的神秘操作]

    Description Solution 哇真的异常服气..线段树都可以搞合并和拆分的啊orzorz.神的世界我不懂 Code #include<iostream> #include< ...

随机推荐

  1. 给Linux系统/网络管理员的nmap的29个实用例子

    Nmap亦称为Network Mapper(网络映射)是一个开源并且通用的用于Linux系统/网络管理员的工具.nmap用于探查网络.执行安全扫描.网络核查并且在远程机器上找出开放端口.它可以扫描在线 ...

  2. CENTOS6.6下mysql5.6的源码安装

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 1.下载:当前mysql版本到了5.6.28 http://dev. ...

  3. Java中空串和null串的区别

    对于空串来说这是一个对象他被""这个对象给实例化了只是他的长度为0字符的内容为空. 而String变量中还可以存储一个特殊的值,这个是null,这个表示没有和其他的对象与这个变量相 ...

  4. 机器学习策略——DeepLearning.AI课程总结

    一.什么是ML策略 假设你正在训练一个分类器,你的系统已经达到了90%准确率,但是对于你的应用程序来说还不够好,此时你有很多的想法去继续改善你的系统: 收集更多训练数据 训练集的多样性不够,收集更多的 ...

  5. Qt 如何使用 QImage 设置指定的颜色为透明色?

    Qt 如何使用 QImage 设置指定的颜色为透明色? 需求背景:使用华大身份证读卡器模块读取身份证信息,通过模块读取的图片为 *.BMP 格式,无透明色,故绘制到身份证上无法美观的显示. 通过查询身 ...

  6. MyCat 读写分离,负载均衡

    docker mysql 主从复制 配合Spring 事务 注意事项 配置好JRE,安装好MYCAT 在mysql主库创建表,会同步到从库 CREATE TABLE `user` ( `id` ) N ...

  7. 使用line_profiler查看api接口函数每行代码执行时间

    项目情景描述: 在restful架构风格的项目交付测试的过程中,某接口出现 请求超时导致的http 502 Bad Gateway,于是开始排查具体是接口函数中的哪行代码或函数 响应时间过长导致的50 ...

  8. JVM笔记2-Java虚拟机内存管理简介

    java虚拟机内存管理图如下图所示: 1.线程共享区,是所有的线程所共用的,线程共享区有一下几个组成: 1.方法区: 1.运行时常量池,已经被虚拟机加载的类信息(1.类的版本信息,2.字段,3.方法, ...

  9. [微信JSSDK] 解决SDK注入权限验证 安卓正常,IOS出现config fail

    实测有效 解决微信游览器和企业微信游览器JSSDK注入权限验证 安卓正常,IOS出现config fail 一开始我们想到的是可能微信这边的Bug,但细想一下应该不是.因为可能涉及到了IOS的底层原理 ...

  10. 用dd实现linux硬盘备份

    一个去年的老本,500G硬盘,空间各种捉急,准备迁移到公司的台式机上,却发现Linux上迁移环境没有Windows下那么方便,只能复制整块硬盘了. 从公司拿了一块1T的硬盘,插入移动硬盘盒(淘宝上搞的 ...