F - Fireworks(三分+概率)

题目:F - Fireworks(三分+概率)

来自:2020-2021 ICPC区域赛南京站F题

牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com)

题意:

一个人造烟花,制作一个烟花需要n的时间,燃放烟花的时间是m(燃放一个烟花是m,燃放多个烟花也是m),但是由于此人手艺不精,烟花完美的概率是p。注意:烟花只有放了才知道是不是完美的。如果所有燃放的烟花中至少有一个是完美的,则结束。问实现该情况的最小期望

思路:

  1. 期望 = 一种情况的权值 * 其概率 + 另一种情况的权值 * 其概率 + …

  2. 假设一个Ex,表示多次造k个烟花后燃放,出现至少一个完美烟花的概率最大的最小期望,简称最优

  3. 形象的讲(不保证正确,但是好理解):每次都造k个后燃放出现完美烟花的概率是最大的,所以每次我们都只造k个烟花后燃放

  4. 所以:
    E ( x ) = ( k × n + m ) × ( 1 − ( 1 − p ) k ) + ( k × n + m ) × ( 1 − p ) k + E ( x ) × ( 1 − p ) k E(x)=(k×n+m)×(1−(1-p)^k)+(k×n+m)×(1-p)^k+E(x)×(1-p)^k E(x)=(k×n+m)×(1(1p)k)+(k×n+m)×(1p)k+E(x)×(1p)k
    分三块去理解:
    1. ( k × n + m ) × ( 1 − ( 1 − p ) k ) 表示当前次制作 k 个烟花后燃放至少出现一次完美烟花的概率 ∗ 消耗的时间 2. ( k × n + m ) × ( 1 − p ) k 表示当前次制作 k 个烟花后燃放一次完美烟花都没有的概率 ∗ 单次消耗的时间 3. E ( x ) × ( 1 − p ) k 表示之前所有次都失败的概率 ∗ 之前用的所有时间 \begin{aligned} &1. (k×n+m)×(1−(1-p)^k) 表示当前次制作k个烟花后燃放至少出现一次完美烟花的概率*消耗的时间 \\ &2. (k×n+m)×(1-p)^k 表示当前次制作k个烟花后燃放一次完美烟花都没有的概率*单次消耗的时间 \\ &3. E(x)×(1-p)^k 表示之前所有次都失败的概率*之前用的所有时间 \end{aligned} 1.(k×n+m)×(1(1p)k)表示当前次制作k个烟花后燃放至少出现一次完美烟花的概率消耗的时间2.(k×n+m)×(1p)k表示当前次制作k个烟花后燃放一次完美烟花都没有的概率单次消耗的时间3.E(x)×(1p)k表示之前所有次都失败的概率之前用的所有时间
    化简公式后发现:

E ( x ) = k × n + m 1 − ( 1 − p ) k E(x) = \frac{k×n+m} {1-(1-p)^k} E(x)=1(1p)kk×n+m

打表或求导可以看出该函数是个具有波谷的函数,用三分找到k次就可求出E(x)

代码:

#include<bits/stdc++.h>
#include<unordered_set>
#define HighPrecisionPrint(n) printf("%.11f\n", (n)) // 答案误差在10^-11次方内的打印
#define UNIQUE(arr) (arr).erase(unique((arr).begin(),(arr).end()),(arr).end())  //将重复的区域删除
#define IOS ios::sync_with_stdio(0); cin.tie(0)
#define all(arr) (arr).begin(), (arr).end()
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf = 0x3f3f3f3f;
const double eps = 1e-7; 
int t;
double m,n,p;/** 题意:一个人造烟花,制作一个烟花需要n的时间,* 燃放烟花的时间是m(燃放一个烟花是m,燃放多个烟花也是m),但是由于此人手艺不精,烟花完美的概率是p。* 注意:烟花只有放了才知道是不是完美的。* 如果所有燃放的烟花中至少有一个是完美的,则结束。* 问实现该情况的最小期望
*/
double Ex(int k)
{double ex = (n*k+m) / (1-pow(1-p,k));return ex;
}
void solve()
{cin>>n>>m>>p;p = p/1e4;double l = 1, r = 1000000000;while(r-l > eps){double mid1 = l + (r-l) / 3;double mid2 = r - (r-l) / 3;if(Ex(mid1) > Ex(mid2)) l = mid1;else r = mid2;}// 保障计算,如果最后l和r是左右两个点,并没有在波谷汇合,所以要手动枚举(while的情况不需要)// for(int i = l+1; i <= r; ++i)//     ans = min(ans,Ex(i));HighPrecisionPrint(Ex(r));
}
int main()
{cin >> t;while (t--){solve();}return 0;
}

特别鸣谢:队友Gary解释思路,以及xjsc01提供的题解思路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/51212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用批处理文件(.bat)启动多个CMD窗口并执行命令

由于每次启动本机的mongodb和kafka&#xff0c;都需要进入相关目录进行启动&#xff0c;操作相对繁琐&#xff0c;于是想起了批处理来帮忙一键启动。 在桌面新建一个txt文件&#xff0c;改后缀名为.bat&#xff0c;并加上下面的代码。 cd /d D:\env-java\mongodb-win32-x86_64…

C++设计模式(工厂方法模式)

文章目录 前言一、工厂方法模式介绍二、工厂方法模式和简单工厂模式对比三、工厂方法模式适用场景四、工厂方法模式示例代码总结 前言 本篇文章来带大家学习C中的工厂方法模式。 一、工厂方法模式介绍 工厂方法模式是一种创建型设计模式&#xff0c;用于通过工厂方法创建对象…

C++ string 类

文章目录 引用头文件初始化赋值1. 空串2. 拷贝复制3. 直接初始化赋值4. 单个字符初始化 遍历 string 类1. 下标索引遍历2. 迭代器遍历3. 使用 range for 循环遍历字符串&#xff08;需要 C11 或更新的版本&#xff09; string 常用方法判断字符串是否为空串获取字符串中字符个数…

数据中台容易失败的20多种原因全部在这里了

数据中台失败的原因总结 在当今数字化转型的浪潮中&#xff0c;数据中台作为关键的战略举措被越来越多的企业所关注和实施。然而&#xff0c;数据中台项目的实施过程中并不乏失败案例&#xff0c;这引业界对于数据中台失败原因的深入思考和分析。通过一些公开的信息和数据&…

如何使用海艺人工智能生成创意汉字

1、用某种字体生成文字。 jf storehttps://store.justfont.com/fonts 2、打开seaart。ai网站。https://www.seaart.ai/home 3、效果如下。 4、右键保存图片。

【算法日志】动态规划刷题:路径数问题(day34)

代码随想录刷题60Day 目录 前言 不同路径 不同路径(2) 前言 今天的动态规划题与昨天的题很类似&#xff0c;只不过今天的题是在二维上讨论&#xff0c;难度上略有提升。 不同路径 int uniquePaths(int m, int n) {vector<int> dp(n 1, 1);for (int i 1; i < m; …

C语言:选择+编程(每日一练Day7)

目录 选择题&#xff1a; 题一&#xff1a; 题二&#xff1a; 题三&#xff1a; 题四&#xff1a; 题五&#xff1a; 编程题&#xff1a; 题一&#xff1a;图片整理 思路一&#xff1a; 思路二&#xff1a; 题二&#xff1a;寻找数组的中心下标 思路一&#xff1…

高阶数据结构跳表

"想象为翼&#xff0c;起飞~" 跳表简介&#xff1f; skiplist本质上是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树和哈希表的价值是 一样的&#xff0c;可以作为key或者key/value的查找模型。 跳表由来 skiplist是由美国计算…

Matplotlib数据可视化(五)

目录 1.绘制折线图 2.绘制散点图 3.绘制直方图 4.绘制饼图 5.绘制箱线图 1.绘制折线图 import matplotlib.pyplot as plt import numpy as np %matplotlib inline x np.arange(9) y np.sin(x) z np.cos(x) # marker数据点样式&#xff0c;linewidth线宽&#xff0c;li…

Fegin异步情况丢失上下文问题

在微服务的开发中&#xff0c;我们经常需要服务之间的调用&#xff0c;并且为了提高效率使用异步的方式进行服务之间的调用&#xff0c;在这种异步的调用情况下会有一个严重的问题&#xff0c;丢失上文下 通过以上图片可以看出异步丢失上下文的原因是不在同一个线程&#xff0c…

基于React实现日历组件详细教程

前言 日历组件是常见的日期时间相关的组件&#xff0c;围绕日历组件设计师做出过各种尝试&#xff0c;展示的形式也是五花八门。但是对于前端开发者来讲&#xff0c;主要我们能够掌握核心思路&#xff0c;不管多么奇葩的设计我们都能够把它做出来。 本文将详细分析如何渲染一…

C++ vector详解

vector是C STL库中最常用的容器类&#xff0c;实际上它是一种模板&#xff08;template&#xff09;。它支持动态扩容&#xff0c;十分方便&#xff0c;不像数组需要新建空间来扩容。 vector支持大部分类型的对象作为其元素&#xff0c;甚至组成vector的元素可以是vector&…

【Python原创毕设|课设】基于Python Flask的上海美食信息与可视化宣传网站项目-文末附下载方式以及往届优秀论文,原创项目其他均为抄袭

基于Python Flask的上海美食信息与可视化宣传网站&#xff08;获取方式访问文末官网&#xff09; 一、项目简介二、开发环境三、项目技术四、功能结构五、运行截图六、功能实现七、数据库设计八、源码获取 一、项目简介 随着大数据和人工智能技术的迅速发展&#xff0c;我们设…

解决Oracle中XML插入数据时的空格问题

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

2.含电热联合系统的微电网运行优化

含电热联合系统的微电网运行优化 MATLAB代码&#xff1a;含电热联合系统的微电网运行优化 关键词&#xff1a;微网 电热联合系统 优化调度 参考文档&#xff1a;《含电热联合系统的微电网运行优化》完全复现 仿真平台&#xff1a;MATLAB yalmipcplex [火]主要内容&#xf…

k8s 常用命令(三)

1、查看版本信息&#xff1a;kubectl version [rootmaster ~]# kubectl version [rootmaster ~]# kubectl version Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.3", GitCommit:"ca643a4d1f7bfe34773c74f7952…

antd5源码分析之classnames库

代码仓库 https://github.com/JedWatson/classnames 可以找到rec/index.js文件 var hasOwn {}.hasOwnProperty;function classNames() {var classes [];for (var i 0; i < arguments.length; i) {var arg arguments[i];if (!arg) continue;var argType typeof arg;if…

代码随想录打卡—day38—【DP】— 8.24 DP基础

1 DP理论基础 1.1 什么是DP 如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 动规是由前一个状态推导出来的&#xff0c;而贪心是局部直接选最优的。 1.2 DP解题步骤 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定状态转移公式 / 递推…

Day14-1-NodeJS后端工程化

一 前端和后端概念 前端 前端:指运用html+css+JavaScript等技术实现用户体验良好的web应用界面工作 根据设计原稿高保真实现页面及交互和后端人员协同完成项目的接口设计与编写文档。和测试人员协同工作,完成bug的修复和跟踪根据产品需求完成对应的功能(nodejs)技术栈 基础…

JAVA开发环境接口swagger-ui使用总结

一、前言 swagger-ui是java开发中生产api说明文档的插件&#xff0c;这是后端工程师和前端工程师联调接口的桥梁。生成的文档就减少了很多没必要的沟通提高开发和测试效率。 二、 swagger-ui的使用 1、引入maven依赖 <dependency><groupId>io.springfox</grou…