不想说啥了…这是我被卡常数卡得最惨的一次…

首先根据期望的线性性,我们考虑每首歌能够被认出来的概率,也就是每首歌对答案贡献的期望.那么定义F[i]为第i首歌被认出来的概率是做不了的,自然想到F[i][j]表示第i首歌恰好在第j秒末被认出来的概率.那么暴力转移是O(n^3),过不了.(codeforces上有人说这个方法忽略小于精度要求的部分就跑过去了….一开始算着0.99^1000=4e-5没敢这么写…)

我们最后把所有F[i][j]加起来即可.(我一开始把所有可能成为最终局面的F[i][j]乘上i再乘上认出出第i+1首歌的概率再加起来….)

设认出第i首歌的概率是p[i],合唱开始的时刻是t[i]

则F[i][j]=p[i]*F[i-1][j-1]+(1-p[i])*p[i]*F[i-1][j-2]+(1-p[i])*(1-p[i])*p[i]*F[i-1][j-3]…….

F[i][j+1]=P[i]*F[i-1][j]+(1-p[i])*p[i]*F[i-1][j-1]+(1-p[i])*(1-p[i])*p[i]*F[i-1][j-2]…….

可见这个转移是很有规律的,我们可以从F[i][j]用O(1)的时间推出F[i][j+1],讨论j和t[i]的大小关系即可.这个转移是O(n^2)的,在较好的常数下可以通过.

最终能通过的代码如下.注释里有对卡常之处的说明.基本上是照着别人代码改的…Sky_miner说他没有被卡常....看来我代码太丑陋?

#include<cstdio>
#include<cmath>
double f[][];//roll arrays?
int main(){
int n,m;scanf("%d%d",&n,&m);
f[][]=;
double ans=;
int x,y;double p,g,h,l,tmp;
for(int i=;i<=n;++i){
f[i][]=;
for(int j=;j<i;++j)f[i][j]=;
scanf("%d%d",&x,&y);p=x/100.0;g=-p;h=pow(g,y-);l=h*g;
tmp=;
for(int j=i;j<=m;++j){
if(j<y){
tmp=tmp*g+p*f[i-][j-];//这几个地方如果不用一个tmp中转,直接写f[i][j]=…会T
}else if(j==y){
tmp=tmp*g+p*f[i-][j-]+f[i-][]*l;//同上
}else{
tmp=tmp*g-l*f[i-][j-y-]+l*f[i-][j-y]+p*f[i-][j-];//同上
}
f[i][j]=tmp;
ans+=f[i][j];
}
}
printf("%.7f\n",ans);
return ;
}

Codeforces 498B Name That Tune的更多相关文章

  1. Codeforces 498B Name That Tune 概率dp (看题解)

    Name That Tune 刚开始我用前缀积优化dp, 精度炸炸的. 我们可以用f[ i ][ j ] 来推出f[ i ][ j + 1 ], 记得加加减减仔细一些... #include<b ...

  2. 【Codeforces 498B】 B. Name That Tune (概率DP)

    B. Name That Tune time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  3. Codeforces 492B Name That Tune ( 期望DP )

    B. Name That Tune time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  4. CodeForces 499D. Name That Tune(概率dp)

    It turns out that you are a great fan of rock band AC/PE. Peter learned that and started the followi ...

  5. 498B Name That Tune

    传送门 题目大意 n首音乐,第i首被听出来的概率为pi,刚开始听第一首,1s后如果听出来了则放第下一首,否则接着听这一首,第i首在连续听了ti s之后一定会被听出来,问Ts后听出来的歌的期望数量. 分 ...

  6. 【Codeforces 499D】Name That Tune

    Codeforces 499 D 题意:给\(n\)个曲子,每个曲子每一秒有\(p_i\)的几率可以被猜出来,过了\(t_i\)秒肯定能被猜出来,猜完第\(i\)首歌立即播第\(i+1\)首,问\(T ...

  7. Codeforces Round #284 (Div. 2) D. Name That Tune [概率dp]

    D. Name That Tune time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  8. Codeforces Round #284 (Div. 1) B. Name That Tune(概率DP)(难)

    B. Name That Tune time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  9. Codeforces Gym 100187K K. Perpetuum Mobile 构造

    K. Perpetuum Mobile Time Limit: 2 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/pro ...

随机推荐

  1. MySQL高级第四章——MySQL的锁机制

    一.概述 1.定义 锁是计算机协调多个进程或线程并发访问某一资源的限制. 2.分类 操作类型来分: 读锁(共享锁)和写锁(排它锁) 数据粒度来分: 表锁和行锁 二.三锁 1.表锁——偏读 特点: 偏向 ...

  2. MySQL高级第一章——架构介绍

    一.简介 是一个经典的RDBMS,目前归属于Oracle 高级MySQL包含的内容: MySQL内核 SQL优化工程师 MySQL服务器的优化 各种参数常量设定 查询语句优化 主从复制 软硬件升级 容 ...

  3. nmap教程(下)

    九.脚本引擎 脚本文件存放在/usr/share/nmap/scripts目录下 SCRIPT SCAN: -sC: equivalent to --script=default #启用默认类脚本 - ...

  4. 北京Uber优步司机奖励政策(2月24日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  5. 成都Uber优步司机奖励政策(1月19日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. ASCII、Unicode、UTF-8编码关系

    由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母.数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122.但是要 ...

  7. spring-boot日志操作

    SpringBoot Logback日志配置 Logback的配置介绍: 1.Logger.appender及layout Logger作为日志的记录器,把它关联到应用的对应的context上后,主要 ...

  8. OpenCV 3.0.0处理鱼眼镜头信息 - Fisheye camera model

    此篇随笔主要参考OpenCV 3.0.0的官方文档翻译而来,主要用作理解OpenCV对鱼眼相机的标定.图像校正.3D重建功能的理解. 版权所有,转载请注明出处~ xzrch@2018.09.29 参考 ...

  9. selenium--特殊元素定位

    该篇博客总结特殊元素(select.radio\checkbox.时间控件.文件上传.图片验证码.模拟鼠标操作.Js 或 JQuery调用)操作. 1.select @Test public void ...

  10. C++错误:Process returned -1073741571 (0xC00000FD)

    最近写程序时,需要将一个一维数组编程二维数组,很简单,写完之后,运行错误! 提示:Process returned -1073741571 (0xC00000FD) 刚开始写的代码如下: #inclu ...