Description

Solution

感谢大佬的博客https://www.cnblogs.com/ywwyww/p/8511141.html

定义dp[i]为[p[i],p[i+1])的期望经过次数,f[i]为处理完事件i后不会再回到i点或以前,直接到终点的概率。

则$dp[i]=1+(1-f[i])+(1-f[i])^{2}+......=\frac{1}{f[i]}$

设事件i+1的胜率为k。

1:下一个事件是敌人,则f[i]=kf[i+1],即$dp[i]=\frac{dp[i+1]}{k}$。

2:下一个事件是旗子,则$f[i]=f[i+1](1+k(1-f[i+1])+k^{2}(1-f[i+1]^{2}+...)=\frac{f[i+1]}{1-k+kf[i+1]}$

把f替换为dp得$dp[i]=(1-k)dp[i+1]+k$

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int mod=1e9+;
typedef long long ll;
ll ksm(ll x,ll k)
{
ll re=;
while (k)
{
if (k&) re=re*x%mod;
k>>=;
x=x*x%mod;
}
return re;
}
ll h,n;
ll p[],a[],b[];char c[][];
ll dp[],ans=;
int main()
{
scanf("%lld%lld",&h,&n);
for (int i=;i<=n;i++)
{
scanf("%s%lld%lld%lld",c[i],&p[i],&a[i],&b[i]);
a[i]=a[i]*ksm(b[i],mod-)%mod;
}
dp[n]=;
for (int i=n;i;i--)
if (c[i][]=='X') dp[i-]=dp[i]*ksm(a[i],mod-)%mod;
else dp[i-]=((-a[i]+mod)%mod*dp[i]%mod+a[i])%mod;
p[n+]=h;
for (int i=;i<=n;i++) ans=(ans+(p[i+]-p[i])%mod*dp[i]%mod)%mod;
cout<<ans;
}

[2016北京集训测试赛5]azelso-[概率/期望dp]的更多相关文章

  1. 【2016北京集训测试赛】azelso

    [吐槽] 首先当然是要orzyww啦 以及orzyxq奇妙顺推很强qwq 嗯..怎么说呢虽然说之前零零散散做了一些概d的题目但是总感觉好像并没有弄得比较明白啊..(我的妈果然蒟蒻) 这题的话可以说是难 ...

  2. [2016北京集训测试赛7]isn-[树状数组+dp+容斥]

    Description Solution 定义dp[i][j]为在1到i个数中选了j个数,并且保证选了i的选法总数. dp[i][j]为所有满足A[k]>A[i]的k(k<i)的dp[k] ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 2、Python文件操作工具 xlrd 工具

    #打开excel文档workbook = xlrd.open_workbook('..\cye.xls',encoding_override='utf-8') #获取sheet页信息sheet = w ...

  2. PhoneGap检测设备网络连接情况

    一.网络连接状态列表 Phonegap 网络连接通过 navigator.network.connection.type 来获取,一般有一下几种状态 1. Connection.UNKNOWN     ...

  3. Tomcat中容器是什么以及容器与容器之间的数量关系。

    Tomcat容器到底是什么 学java有一小段时间了,一直使用Tomcat,也知道Tomcat是一个大的Servlet容器,里面还有许多子容器,容器之间都是相互嵌套的.也看过一下接收Tomcat的文章 ...

  4. 【CSS】使用浮动来创建拥有页眉、页脚、左侧目录和主体内容的首页

    有两种创建水平导航栏的方法.使用行内或浮动列表项. 如果您希望链接拥有相同的尺寸,就必须使用浮动方法. 1.构建水平导航栏的方法之一是将 <li> 元素规定为行内元素: display:i ...

  5. WOSign API

    [HttpGet] public ActionResult WoSign() { // System.IO.FileStream fs = System.IO.File.OpenRead(System ...

  6. Oracle编辑数据时提示:这些查询结果不可更新,请使用ROWI或者SELECT……FOR UPDATE获得可更新结果

    我们在对Oracle数据库进行操作时,有时会在查询完结果后想要对其中的某些数据进行操作,当我们点击编辑(一个锁标志)是,会提示我们上述问题中的错误:这些查询结果不可更新,请使用ROWI或者SELECT ...

  7. Linux内存管理-高端内存(二)

    在支持MMU的32位处理器平台上,Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同.Lin ...

  8. linux下安装php扩展amqp

    1 安装扩展必要依赖 rabbitmq-c 安装包地址:https://github.com/alanxz/rabbitmq-c/releases wget -c https://github.com ...

  9. Python 学习笔记(十五)Python类拓展(一)继承

    继承 继承(Inheritance):是面向对象软件技术当中的一个概念.如果一个类别A "继承自" 另一个类B,就把这个A称为“B的子类”,而把B称为“A的父类”,也可以称“B是A ...

  10. 【腾讯敏捷转型No.7】QQ邮箱如何通过敏捷成为行业第一

    前几篇文章讲到2006年的腾讯是如何开始敏捷转型的,接下来这篇文章,我将向大家讲述,腾讯开始敏捷转型之后,QQ邮箱是如何通过敏捷成为行业第一. 众所周知,张小龙是“微信之父”,对他熟悉的人,应该也知道 ...