标签:表达式 code ace ios scanf mes ros printf stream
设函数f(x)表示长度为x的棒截断次数的期望值.
(1) 明显当x<=d时,f(x)=0;
(2) 当f(x)>d时,f(x)=1+f(0~d)+f(d~x).
1表示必定要截断一次,f(0~d)表示截断一次后剩下0~d长度时的期望值,f(d~x)表示截断一次后剩下d~x长度时的期望值.
由(1)知,f(0~d)=0,关键在于求f(d~x),在长度为x的棒上截断一次,截断概率均为1/x,因此f(d~x)=(1/x)*∫(x,d)f(x)dx.
有f(x)=1+(1/x)*∫(x,d)f(x)dx,两边求导,f′(x)=-(1/x2)*∫(x,d)f(x)dx+(1/x)f(x).联立f(x)和f′(x)的表达式求的,f′(x)=1/x,则f(x)=lnx+C,把f(d)=1代入解得C=-lnd+1.
综上所述有
f(x)={0,x<=d
{lnx-lnd+1,x>d
1 #include <iostream> 2 #include <cmath> 3 4 using namespace std; 5 6 typedef long long LL; 7 8 int main() 9 { 10 int t; 11 cin>>t; 12 while(t--) 13 { 14 double x,y; 15 scanf("%lf %lf",&x,&y); 16 if(x<=y) printf("0.000000\n"); 17 else printf("%.6f\n",log(x)-log(y)+1); 18 } 19 return 0; 20 }
标签:表达式 code ace ios scanf mes ros printf stream
原文地址:https://www.cnblogs.com/VBEL/p/11956932.html