首页 技术 正文
技术 2022年11月21日
0 收藏 322 点赞 4,935 浏览 903 个字

题意:一个人若连续进k1个球或连续不进k2个球,游戏结束,给出这个人不进球的概率p(注意:是不进球!!!),求到游戏结束时这个投球个数的期望。

不进球概率为p,进概率 q=1-p。
设 f[i] 表示连续 i 次不进结束的期望,t[i]表示连续 i 次进球,距离结束的期望。显然,f[k2]=t[k1]=0;
f[i] = q*(f[i+1]+1)+p*(1+t[1]) , t[i] = p*(t[i+1]+1)+q*(1+f[1]).

答案是 p*t[1]+q*f[1]+1.
然后就算t[1],f[1]
将t[1],f[1]都移到等式左边,等式右边是其余的项,然后左右都乘以q/p^i(i=0,1,…k2-2/k1-2),总共k2-1/k1-1项。
消除中间项,只剩f[1],t[1]。然后就求解二元一次方程

#include <iostream>
#include <cmath>
#include <string.h>
#include <algorithm>
#include <cstdio>using namespace std;
double p,q; //击不中的概率为p,击中的概率为q
int k1,k2; //连续击中k1次,连续不击中k2次int main()
{
int t;
int cases=;
scanf("%d",&t);
while(t--){
scanf("%lf%d%d",&p,&k1,&k2);
//不加下面的两个if,为WA
if(p>-1e-)
{
//未击中的概率近似为1
printf("Case %d: %.5lf\n",++cases,1.0*k2);
continue;
}
else if(p<1e-)
{
//未击中的概率近似为0
printf("Case %d: %.5lf\n",++cases,1.0*k1);
continue;
}
q=-p;
double a1=-pow(q,k1-),b1=a1/(-q);
double a2=-pow(p,k2-),b2=a2/(-p);
double t1=(a1*b2+b1)/(-a1*a2),f1=a2*t1+b2;
printf("Case %d: %.5lf\n",++cases,p*f1+q*t1+);
}
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,992
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,506
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,349
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,134
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,766
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,844