题目描述
输入描述
输出描述
输入样例
3
2 2
4 3
2 1
输出样例
0.50
0.22
0.00
与其说是个打着概率dp标签的题不如说就是个数学题
推导过程如图,注意特判当 k = x k=x k=x, k > 2 ∗ x k>2*x k>2∗x 时的结果。
同时,在第一种可能( 即 k < x k<x k<x )中,由于 a 有一半的几率大于 b,且在该状态下一定超出,则该可能的结果需要加上 0.5 0.5 0.5 。
参考代码
#include<bits/stdc++.h>
using namespace std;
double x,k,ans;
int main(){
int t;
cin >> t;
while(t--){
cin>>k>>x;
if(k<x){
ans=((double)1.0*x*x-k*k)/(2.0*x*x);
ans+=0.5;
}
else if(k==x){
ans=0.5;
}
else if(k>=x&&k<2*x){
ans=(double)(2.0*x-k)*(2.0*x-k)/(2.0*x*x);
}
else ans=0;
printf("%.2lf\n",ans);
}
return 0;
}