(2020年icpc南京站)Fireworks(数学期望)

题目链接:F-Fireworks_第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京) (nowcoder.com)

题目大意:你每做一个烟花要n分钟,释放已做好的所有烟花需要m分钟,每只烟花成功释放的概率为p。问你在采取最优策略的前提下,直到成功释放第一个烟花时最小的期望时间花费。

我们假设每x次点燃一次,则每次成功的概率是(1-(1-p)^x),假如我们第一次点燃未发现完美烟花,那我们就需要进行第二次点燃,如果第二次点燃依旧没有发现完美烟花那我们就进行第三次点燃,直至发现完美烟花为止,这不就是一个几何分布的概率模型吗,在一个几何分布中,如果每次实验成功的概率为p则其成功期望为1/p,下面给出证明:

则时间期望就是几何分布的期望乘以每次实验所花费的时间了,也就是(n*x+m)/(1-(1-p)^x),剩下的就是利用三分对这个函数求解极值了。

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
using namespace std;
int n,m;
double f(double x,double p)
{
	return (m+n*x)/(1-pow(p,x));
}
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		double p;
		scanf("%d%d%lf",&n,&m,&p);
		p/=10000;
		double l=1,r=100000000,lmid,rmid;
		while(r-l>0.0000001)
		{
			lmid=l+(r-l)/3;
			rmid=r-(r-l)/3;
			if(f(lmid,1-p)>f(rmid,1-p)) l=lmid;
			else r=rmid;
		}
		printf("%.10lf\n",min(f((int)l,1-p),f((int)l+1,1-p)));
	}
	return 0;
}
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值