ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Fireworks 期望 + 概率 ICPC2020 上海

2021-01-25 22:32:03  阅读:215  来源: 互联网

标签:ICPC2020 1.0 int double ll Fireworks 火焰 lans 期望


Fireworks 期望 + 概率

题目大意:

制作一个火焰花费 n 分钟,这个火焰是完美的概率是 \(p\) ,点亮所有制作的火焰花费的时间是 m 分钟,问成功点亮一个完美火焰的最短时间是多少。

题解:

这个题目其实不是很难,但是我不会写,对我来说真的好难啊,我真的一点也不会期望概率,需要好好补一下。

花费 \(x\) 次制作一个完美的火焰的概率是:\(\frac{1}{1-(1-p)^{x}}\) ,花费的时间是:\(\frac{n*x+m}{1-(1-p)^{x}}\) ,这个可用三分解决。

这个题目,我又wa了很多发,原因是我在 f 函数里面的 n*x,没有在前面乘以1.0

以后碰到要乘以1.0 或者是1ll 的一定要在开头乘!!!!

#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define inf64 0x3f3f3f3f3f3f3f3f
using namespace std;
const int maxn = 5e5+10;
typedef long long ll;
const double EPS = 1e-9;
int n,m,P;
double q;
double f(int x){
    return (1.0*n*x+1.0*m)/(1.0-pow(q,x));
}
int main() {
    int t;
    scanf("%d", &t);
    while (t--) {
        scanf("%d%d%d",&n,&m,&P);
        q =1 - P*0.0001;
        ll l = 1,r = 1e9;
        double lans = f(l),rans = f(r);
        while(l < r) {
            ll lmid = l + (r - l) / 3;
            ll rmid = r - (r - l) / 3;
            lans = f(lmid),rans = f(rmid);
            // 求凹函数的极小值
            if(lans <= rans) r = rmid - 1;
            else l = lmid + 1;
        }
        printf("%.10f\n",min(lans,rans));
    }
}

标签:ICPC2020,1.0,int,double,ll,Fireworks,火焰,lans,期望
来源: https://www.cnblogs.com/EchoZQN/p/14327800.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有