题目链接:
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));
}
}