【概率】COGS 1487:麻球繁衍
2015-07-12 18:29
274 查看
Description
万有引力定律:“使物体相互靠近的力的大小与物体的质量成正比——而物体的质量又由同一种力决定。这是一个有趣并且有益的例子,说明了科学是如何用A证明B,再用B证明A的。”——安布罗斯·比尔斯(美国讽刺作家——译者注)。
你有一坨K个毛球(<星际迷航>中的种族——译者注)。这种毛球只会存活一天。在死亡之前,一个毛球有P_i的概率生出i个毛球(i=0,1,…,n-1)。m天后所有毛球都死亡的概率是多少?(包含在第m天前全部死亡的情况)
Input
输入包含多组数据。输入文件的第1行是一个正整数N,表示数据组数。
每组数据的第1行有3个正整数n(1<=n<=1000),k(0<=k<=1000),m(0<=m<=1000)。
接下来有n行,给出P_0,P_1,…,P_n-1。
Output
对于第i组数据,输出”Case #i: “,后面是第m天后所有毛球均已死亡的概率。首先这题我们设f[i]为一只毛球在i天以内全部死亡的概率。可得
f[i]=p0+f[i-1]*p1+(f[i-1])2*p2+(f[i-1])3*p3...
每只毛球和它的后代死亡的概率是独立的,所以生了1只毛球就是p1的几率*死亡的几率f[i-1],2只f[1-1]2(乘法原理)
最后答案:f[m]k。
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; double qvod(double x,int k) { double ans=1; while(k) { if(k&1)ans=ans*x; x=x*x; k>>=1; } return ans; } double f[1001],gg[1001]; int main() { freopen("tribbles.in","r",stdin); freopen("tribbles.out","w",stdout); int n,k,T,m,b=0; scanf("%d",&T); while(T--) { b++; scanf("%d%d%d",&n,&k,&m); for(int i=0;i<n;i++) scanf("%lf",&gg[i]); f[0]=0,f[1]=gg[0]; for(int i=2;i<=m;i++) { f[i]=0; for(int j=0;j<n;j++) { f[i]+=gg[j]*qvod(f[i-1],j); } } printf("Case #%d:%.7lf\n",b,qvod(f[m],k)); } return 0; }
View Code
相关文章推荐
- Android Application详解
- 分组密码算法
- Java_GUI中GridBagLayout布局使用详解
- 【算法设计与分析基础】高斯消元
- 自定义二级联动
- navicate连接Linux下mysql慢,卡,以及mysql相关查询,授权
- 有趣的数
- 在樱花vps上安装win系统(下)
- windows平台多线程同步之Mutex的应用
- cocos2d-js(一)引擎的工作原理和文件的调用顺序
- win32汇编 数据类型及定义
- vim 复制
- cocos2d-js(一)引擎的工作原理和文件的调用顺序
- ubuntu,从一个新用户,要转到新用户的命令行操作
- 三种扩展 Office 软件功能的开发模型对比 – Office Add-In Model, VBA 和 VSTO
- 正则表达式12
- PAT 数据结构 04-树4. Root of AVL Tree (25)
- 孪生素数问题
- Android Application详解
- JDBC问题总结