UVa11021 Tribbles

你有K个麻球。一个只会存活一天。在死亡之前,一个麻球有P_i的概率生出i个麻球(i=0,1,…,n-1)。m天后所有麻球都死亡的概率是多少?(包含在第m天前全部死亡的情况)


麻球之间是独立的,只算一个麻球就行了

直接枚举生出几只麻球算概率

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=;
const double eps=1e-;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,m,k;
double p[N],f[N];
double Pow(double a,int b){
double re=1.0;
for(;b;b>>=,a*=a)
if(b&) re*=a;
return re;
}
int main(){
freopen("tribbles.in","r",stdin);
freopen("tribbles.out","w",stdout);
int T=read(),cas=;
while(T--){
n=read();k=read();m=read();
for(int i=;i<n;i++) scanf("%lf",&p[i]);
f[]=p[];
for(int i=;i<=m;i++){
f[i]=p[];
double po=;
for(int j=;j<n;j++) po*=f[i-],f[i]+=p[j]*po;
}
printf("Case #%d: %.7lf\n",++cas,Pow(f[m],k));
}
}



Uva11427 Expect the Expected

我喜欢玩纸牌接龙。每次我都有p的概率赢,1-p的概率输。游戏程序会统计我获胜盘数的百分比。如果我一直玩下去,这个百分比就会在p*100%左右浮动。但我仍不满足。

这是我的计划。每天,我都会玩纸牌接龙。如果我赢了,我就高高兴兴地去睡觉。如果我输了,我就一直玩下去直到我这天获胜盘数的百分比严格大于p。这时,我就会宣布胜利,然后高高兴兴地去睡觉。你可以看到,每天我都可以宣布自己保持了获胜比例大于p*100%。我打败了数学规律!

如果你感觉这里好像有什么奇怪的东西,那你就对了。我不可能永远这么做,因为我每天玩的游戏盘数有限。我每天至多玩n盘游戏。那么,这个机智的计划在因为这一限制失败前,执行天数的数学期望是多少?值得注意的是,答案至少为1,因为我至少要玩一天才能发现计划失败了。


每天晚上独立,算一天晚上失败的概率

$f[i][j]$表示$i$局赢了$j$局.....

设失败概率$Q=\sum f[n][j]: \frac{j}{n}\le p$

然后加权上天数求期望,列出来发现是无穷级数.......

$Q+2Q(1-Q)+3Q(1-Q)^2....$

然后看白书,成功得到解法

好吧说个靠谱的:用那些数列求和的技巧把系数弄去,然后套公式

$\sum\limits_{i=1}^{\infty}x^{ik}=\frac{1}{1-x^k}$

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=;
const double eps=1e-;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,m,k;
double p[N],f[N];
double Pow(double a,int b){
double re=1.0;
for(;b;b>>=,a*=a)
if(b&) re*=a;
return re;
}
int main(){
freopen("tribbles.in","r",stdin);
freopen("tribbles.out","w",stdout);
int T=read(),cas=;
while(T--){
n=read();k=read();m=read();
for(int i=;i<n;i++) scanf("%lf",&p[i]);
f[]=p[];
for(int i=;i<=m;i++){
f[i]=p[];
double po=;
for(int j=;j<n;j++) po*=f[i-],f[i]+=p[j]*po;
}
printf("Case #%d: %.7lf\n",++cas,Pow(f[m],k));
}
}

最新文章

  1. Eclipse--Web项目中 .classpath、mymetadata、project文件的功用
  2. K-邻近算法
  3. golang 定时器
  4. HDU-4725 The Shortest Path in Nya Graph 最短路
  5. css滑动门制作圆角按钮
  6. js之date()对象
  7. java使用POI操作XWPFDocument 生成Word实战(一)
  8. 关于hue安装后出现KeyError: &quot;Couldn&#39;t get user id for user hue&quot;的解决方法
  9. 微信小程序开发小记
  10. nginx简介与配置
  11. Jenkins控制台显示乱码
  12. 我的代码库-Java8实现FTP与SFTP文件上传下载
  13. 【一】java 虚拟机 监控示例 Eclipse Memory Analyser
  14. 开发入门,学Java还是学大数据?
  15. 函数作用域之闭包与this!
  16. 4th,Python三级菜单
  17. jqGrid 清空单元格的方法
  18. 《面向对象程序设计》六 GUI
  19. [Tool] Enable Prettier in VSCode as Format on Save and add config files to gitingore
  20. 漫谈js自定义事件、DOM/伪DOM自定义事件

热门文章

  1. HDU--1212大数取模
  2. JFinal极速开发框架使用笔记(二) 两个问题,一个发现
  3. 剪邮票dfs+bfs+组合+结构体
  4. Kubernetes volumes简介
  5. 面试官最爱的volatile关键字
  6. ios 一步一步学会自定义地图吹出框(CalloutView)--&gt;(百度地图,高德地图,google地图)
  7. UITableViewCell滑动删除及移动
  8. java开发常用jar包
  9. MySQL字符集设置—MySQL数据库乱码问题
  10. spring MVC 运行过程