題目連結:
http://acm.split.hdu.edu.cn/showproblem.php?pid=5984
題目大意:
對于一根長度為
L
的木棍,每次等機率的取一個點将其分成兩半,然後吃掉左邊一半,直到剩下的長度小于
d
,計算需要吃(分割)次數的數學期望
題目思路:
顯然,如果
L/d
相同,則結果必定相同
根據
ln2 = 0.693147
可以推測出結果應該是
ln(L/d) + 1
再單獨考慮不需要分割的情況(
d>=L
)
(居然還可以這樣,真的是給跪了)
代碼:
#include <bits/stdc++.h>
using namespace std;
int main(){
int t;
scanf("%d", &t);
while (t--){
double d, l;
scanf("%lf%lf", &d, &l);
if (d <= l){
printf("0.000000\n");
continue;
}
printf("%.6lf\n", 1 + log(d / l));
}
}