ICPC2020南京F.Fireworks

寫在前面

大概是高中退役之後第一次寫寫題解,當然要從基礎寫起,因爲變得更菜了,所以只能寫寫更水的題目了

題目鏈接

ICPC南京F

題解

點燃之的問題與點燃前像相同,所以最優方案爲每次都點燃k個
所以期望是一個關於k的函數,點燃k個至少有一個點燃的爲事件\(P\),概率爲\(1 - (1 - p) ^ k\)
關於\(P\)的獨立重複實驗爲幾何概型,使P發生至少一次的實驗次數的期望就是\(\frac{nk+m}{1 - (1 - p) ^ k}\)是個下凸單峯函數。

代碼

#include<cmath> 
#include<cstdio> 
#include<iostream> 
#include<bits/stdc++.h> 
using namespace std; 
#define gc getchar()
#define pc putchar

inline int read() {
    char c = gc;
    int x = 0;  
    while(c < '0' || c > '9')c = gc; 
    while(c <= '9' && c >= '0') x = x * 10 + c - '0',c = gc; 
    return x; 
} 
#define LL long long
#define eps 1e-9
double n,m,p; 
double calc(int x) {
    return (x * n + m) / (1 - pow(1 - p,x)) ; 
}
int main() { 
    int T = read(); 
    while(T --) { 
        cin>> n >> m >> p; 
        p /= 10000; 
        LL l = 0,r = 1000000007; 
        while(r - l > 0) { 
            LL mid = (r - l) / 3;
            LL m1 = l + mid,m2 = r - mid; 
            double c1 = calc(m1);double c2 = calc(m2); 
            if(c1 < c2) r = m2 - 1; 
            else l = m1 + 1; 
        }
        printf("%.10lf\n",calc(l)); 
    }
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章