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

题目描述

Kotori is practicing making fireworks for the upcoming hanabi taikai1. It takes her minutes to make a single firework, and as she is not really proficient in making fireworks, each firework only has a probability of to be perfect.

After she finishes making a firework, she can just start making the next firework, or take minutes to light all the remaining fireworks finished before. If there is at least one perfect firework among the lit ones, she will be happy and go to rest. Otherwise, she will continue practicing. Can you tell her the minimum expected practicing time before she goes to rest if she takes the optimal strategy?

Notice that no matter how many fireworks remain, it always takes minutes to light them all.

1Hanabi taikai: Romaji of the Japanese word "花火大會", which means the firework... err... party?

输入描述:

There are multiple test cases. The first line of the input contains an integer  () indicating the number of test cases. For each test case:

The first and only line contains three integers ,  and  (, ).

输出描述:

For each test case, output one line containing one number indicating the minimum expected practicing time.

Your answer will be considered correct if and only if the absolute or relative error does not exceed .
示例1

输入

3 1 1 5000 1 1 1 1 2 10000

3
1 1 5000
1 1 1
1 2 10000

输出

4.0000000000 10141.5852891136 3.0000000000

4.0000000000
10141.5852891136
3.0000000000

题目大意

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

分析

开始的时候理解错了意思,算了半天的平均期望。后来意识到我的做法不符合“最优策略”的要求。

再思考因为每次都是集中释放所有做好的,所以可以假设当取最优策略时,设每制作k个烟花后集中释放一次。这个问题可以转化为每次制作并释放k个烟花,重复这一过程直到某次释放时成功出现一个烟花为止,求当前期望时间花费。这就变成了一个典型的几何分布问题。

此时每轮的时间开销为k∗n+mk*n+mk∗n+m,概率为至少成功释放一个烟花的概率(1−(1−p)k)(1-(1-p)^k)(1−(1−p)k),根据几何分布公式得期望为1(1−(1−p)k)\frac {1}{(1-(1-p)^k)}(1−(1−p)k)1​。乘以每轮开销得期望时间花费k∗n+m1−(1−p)k\frac {k*n+m}{1-(1-p)^k}1−(1−p)kk∗n+m​。

对上式打表或者求二阶导可知这是个单峰的凹函数。直接三分答案即可。

#include <bits/stdc++.h>
using namespace std;long double fun(int k,int n,int m,long double p){return ((long double)k*n+m)/((long double)1.0-pow(1.0-p,k));
}int main(){int T;cin>>T;while(T--){int n,m;long double p;cin>>n>>m>>p;p*=(1e-4);int l=1,r=0x3f3f3f3f;while(l<r){int mid1=l+(r-l)/3,mid2=r-(r-l)/3;if(fun(mid1,n,m,p)<fun(mid2,n,m,p)) r=mid2-1;else l=mid1+1;}printf("%.10Lf\n",fun(l,n,m,p));}return 0;
}

参考资料

几何分布_百度百科
二分答案法、三分法_Hello ACM-CSDN博客
2020年ICPC南京区域赛题解 - 知乎

2020 ICPC 南京站 F Fireworks (概率论+三分)相关推荐

  1. 2020 ICPC 南京站 M Monster Hunter (树形DP)

    题目链接:M-Monster Hunter_第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京) 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5 ...

  2. 2020 ICPC 南京 H Harmonious Rectangle (DFS剪枝+思维)

    题目链接H-Harmonious Rectangle_第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京) 题目描述 A vertex-colored rectangle is a rec ...

  3. 2022 ICPC 南京站

    2022 ICPC 南京 三题 铜 第一块 ICPC 牌子 用了两个小时就结束了,后面三小时 D和M一起开 非常可惜一题都没过,D题我们用了主席树加二分 复杂度是 nlogn2nlogn^2nlogn ...

  4. Fireworks(2020 ICPC南京)

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

  5. 2019 ICPC南京站总结

    人生第一场 ICPC 区域赛,血崩 去比赛之前看到参赛手册,清一色的强队,对拿奖没抱太大希望,只想着能出几个就出几个,尽最大努力就好了 周六下午热身赛,记错时间了去晚了尽半个小时,到场后先测了测 ID ...

  6. 树形dp --- 2020 icpc 南京 M Monster Hunter

    题目链接 题目大意: 解题思路: 首先我们分析一下每个点状态是怎么? 1.1: 对于这个点我们删除的代价我们要看一下它儿子有多少个没被删除(指没用)因为父亲节点没删这个点呀删除不了 1.2: 那么这个 ...

  7. 2019 ACM/ICPC 南京站 E.Observation,区间筛

    题目大意 求 (∑d=LR(fdxor K))(modP)\Big(\sum\limits_{d=L}^{R} (f_d\text{ xor } K)\Big)\pmod{P}(d=L∑R​(fd​  ...

  8. 2018 ICPC焦作站 F题 Honeycomb【bfs】

    题目链接:https://codeforces.com/gym/102028/problem/F 这题就是输入处理比较恶心,先写个gets(mp[x]+1) 本地没问题,oj的编译器直接报错,真玄学, ...

  9. Codeforces gym101981 (2018 icpc 南京站) B.Tournament

    一条直线上有N个村庄,要在这条直线上选K个地方建雕像,使得每个村庄到离其最近的雕像的距离的和最小.输出最小的和.(范围1e5) 首先考虑一堆村庄建一个雕像,则最优方案一定是放在中间的村庄(偶数的话中间 ...

最新文章

  1. Unity3d载入外部图片文件
  2. 1亿美元,苹果把网易投资的VR公司收了
  3. 经典复现:《统计学习方法》的代码实现(在线阅读!)
  4. P1032 字串变换(bfs)
  5. 服务器php 启动命令_禁止php运行服务器命令行函数的安全配置
  6. idea xml文件引入类提示_IntelliJ IDEA:引用XML模式和DTD
  7. python3.5安装pygame_python怎么安装pygame
  8. java与bartender_Java调取Bartender使用教程.md
  9. Python3 配置文件(configparser)(转载)
  10. oracle 造数据脚本_Oracle数据库shell脚本--统计所有数据库用户信息及明细
  11. win7计算机右键属性桌面进程重启,win7计算机右键属性打不开怎么办
  12. linux free 命令中buffers、cached以及-/+ buffers/cache解析
  13. 从 RequireJs 源码剖析脚本加载原理
  14. bootstrap-table 加表格线 样式换成table-bordered
  15. Linux查看安装了哪些软件
  16. php工具箱怎么换php版本,最新php程序员工具箱 v1.0版本介绍
  17. 两个音频怎么合并在一起?
  18. 计算机网络职业评估报告,计算机网络技术专业个人职业生涯规划书.doc
  19. 在东钿第一次早会分享励志小故事。
  20. 使用mencoder或(ffm)将图片生成视频

热门文章

  1. 射极跟随器的负载加重理解
  2. Python爬取虎扑步行街,爆照区中的照片
  3. 利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字以及Map函数讲解
  4. 西藏2022中国农民丰收节 国稻种芯:让农牧民成为活动主角
  5. 小白学习Python的第七天之集合和字符串
  6. 劲舞团登陆自动关闭解决方法
  7. APMServ相关(AllowOverride)
  8. 游戏系统开发笔记(三)——通用代码库
  9. 嫌故宫灯光秀闹腾,这个有诗意,还像过节吗?
  10. IT人读《论语》:1.2理解和感悟