首页 > 编程语言 >第 45 届国际大学生程序设计竞赛亚洲区域赛(南京)

第 45 届国际大学生程序设计竞赛亚洲区域赛(南京)

时间:2022-10-28 22:48:36浏览次数:73  
标签:竞赛 期望 int double 45 long 烟花 程序设计 define

比赛链接

第 45 届国际大学生程序设计竞赛亚洲区域赛(南京)

F.Fireworks

制作一个烟花需要n分钟,成功的概率为p。完成一次制作后可以继续制作或花m分钟点燃之前所有的烟花,如果有一个烟花是成功的,那么就可以开始休息。
求最小的期望开始休息时间(即期望的最早成功制作一个烟花的时间)

解题思路

三分,期望

题目转化为每轮制作烟花 \(k\) 次,释放一次的最小期望,记期望代价为 \(f(k)\),每轮代价为 \(k\times n+m\),设 \(q=1-p\),即失败的概率,则其前 \(k\) 次中成功的概率为 \(1-q^k\),此分布为几何分布,期望为 \(\frac{1}{1-q^k}\),则其期望代价为 \(\frac{k\times n+m}{1-q^k}\),此函数为单峰函数,三分求极值即可

  • 时间复杂度:\(O(logn)\)

代码

// Problem: Fireworks
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/45201/F
// Memory Limit: 524288 MB
// Time Limit: 4000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

// %%%Skyqwq
#include <bits/stdc++.h>
 
//#define int long long
#define help {cin.tie(NULL); cout.tie(NULL);}
#define pb push_back
#define fi first
#define se second
#define mkp make_pair
using namespace std;
 
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
 
template <typename T> bool chkMax(T &x, T y) { return (y > x) ? x = y, 1 : 0; }
template <typename T> bool chkMin(T &x, T y) { return (y < x) ? x = y, 1 : 0; }
 
template <typename T> void inline read(T &x) {
    int f = 1; x = 0; char s = getchar();
    while (s < '0' || s > '9') { if (s == '-') f = -1; s = getchar(); }
    while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar();
    x *= f;
}

int t,n,m;
double p,q;
double f(double k)
{
	return (1.0*k*n+m)/(1.0-pow(q,k));
}
int main()
{
    for(cin>>t;t;t--)
    {
    	cin>>n>>m>>p;
    	p*=0.0001,q=1-p;
    	int l=0,r=1e9;
    	double res=1e18;
    	while(l<r)
    	{
    		int midl=l+(r-l)/3,midr=r-(r-l)/3;
    		double fl=f(midl),fr=f(midr);
    		if(fl<=fr)r=midr-1;
    		else
    			l=midl+1;
    		res=min({res,fl,fr});
    	}
    	printf("%.10lf\n",res);
    }
    return 0;
}

标签:竞赛,期望,int,double,45,long,烟花,程序设计,define
From: https://www.cnblogs.com/zyyun/p/16837716.html

相关文章

  • 【BZOJ4504】K个串(优先队列,可持久化线段树)
    Description兔子们在玩k个串的游戏。首先,它们拿出了一个长度为n的数字序列,选出其中的一个连续子串,然后统计其子串中所有数字之和(注意这里重复出现的数字只被统计一次)。......
  • leetcode145-二叉树的后序遍历
    145.二叉树的后序遍历classSolution{public:vector<int>res;voidTracking(TreeNode*root){if(root==nullptr)return;Tracking......
  • 2022-2023-1 20221421 《计算机基础与程序设计》第九周学习总结
    作业信息班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09作业目标:cpu调度,进程控制,先到先......
  • DS145-16A-ASEMI原厂代理艾赛斯超快恢复二极管DS145-16A
    编辑-ZDS145-16A用的TO-247-2封装,是艾赛斯一款汽车用超快恢复高压二极管。DS145-16A的总功耗(Ptot)为270W,反向电流,漏电流(IR)为40uA,其工作时耐温度范围为-40~175摄氏度。DS145-1......
  • DS145-16A-ASEMI原厂代理艾赛斯超快恢复二极管DS145-16A
    编辑-ZDS145-16A用的TO-247-2封装,是艾赛斯一款汽车用超快恢复高压二极管。DS145-16A的总功耗(Ptot)为270W,反向电流,漏电流(IR)为40uA,其工作时耐温度范围为-40~175摄氏度。DS145......
  • 2022-2023-1 20221307 《计算机基础和程序设计》第九周学习总结
    作业信息这个作业属于那个班级 https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09作业目标学习......
  • uva 1456
    比如,手机可能位于 5 个区域中,概率分别为 0.3,0.05,0.1,0.3,0.25,则一种方法是先同时访问 \{c1,c2,c3\},再同时访问 {c_4,c_5},访问区域数量的期望为  3*(0.3+0.05......
  • Java — 程序设计基础(Core Java I)
    了解基本程序设计结构:这章节有几个以前没注意的坑,在这里贴出来~提醒以后的自己也希望过路的朋友踩。基本数据类型/运算符1.System.out.println(2.0-1.1)打出来的是0.89......
  • LC55---跳跃游戏---LC45---跳跃游戏II
    ​​55.跳跃游戏​​难度中等1047给定一个非负整数数组​​nums​​,你最初位于数组的第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能......
  • 河南省第十三届ICPC大学生程序设计竞赛 题解
    河南省第十三届ICPC大学生程序设计竞赛题解难的题挺难,简单的也很简单。总体而言题目质量还可以,有许多很新奇的知识点插入。A.祝融传火题目给定矩阵以及长宽为的矩形,问是否......