寫在前面
大概是高中退役之後第一次寫寫題解,當然要從基礎寫起,因爲變得更菜了,所以只能寫寫更水的題目了
題目鏈接
題解
點燃之的問題與點燃前像相同,所以最優方案爲每次都點燃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));
}
}