题意

  • 长为x的跑道上有A,B两个打卡点,必须先在A打卡再在B打卡
  • 请问完成两次打卡后跑步距离超过k的概率

思路

  • 用图形算概率,横轴为A纵轴为B,占比就是概率
  • 如果k<x,那么只要B<=A||(B>A&&B>k)就可以
  • 如果k>x,那么B>=k-x&&B<=A
  • 如果k>2x,寄
  • 如果k=x,当且仅当B<=A

代码

#include<bits/stdc++.h>
using namespace std;
void solve(){
    int k,x;
    scanf("%d%d",&k,&x);
    if(k>2*x)
        printf("0.00\n");
    else if(k>x)
        printf("%0.2lf\n",1.0*(2*x-k)*(2*x-k)/(2.0*x*x));
    else if(k==x)
        printf("0.50\n");
    else 
        printf("%0.2lf\n",1.0-(1.0*k*k/2.0)/x/x);
}

int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        solve();
    }
    return 0;
}