题面意思,问围着一个x的跑道跑顺时针跑,打卡完毕的时候跑k米及以上的概率。

思路:
因为这个人跑步只能先打第一张卡,在打第二张卡,所以有可能第二张卡在第一张卡前面,那么这个人就得跑第二圈才能打第二张卡,否则是直接就可以在第一圈打掉第一张卡和第二张卡。而且,无论如何都是可以在两圈以内完成打卡的

根据这个规律,将情况分为三种:
(正难则反,求能够在k米之前能够完成打卡的概率,最后再减)
1.k≥2x,那么这个人将永远不可能跑到k米
2.k>=x&&k<x,那么要想跑k米,就一定会倒腾到第二圈,即第二张卡在第一张卡前面,直接减去第一张卡在第二张卡前面的概率0.5。第一张卡只需要放在第二张卡的后面,然后第二张卡放到前(k-x)米,概率也就是(k-x)/x,再减去这个概率
3.k<x,那么这种情况下就很简单了,只有把两张卡都放在前(k)米,才会跑在k米之前完成任务,所以用1.0减去k米前完成的概率

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int k,x;
        scanf("%d%d",&k,&x);
        if(k>=2*x) printf("0.00\n");
        else if(k>=x&&k<2*x)
        {
            double ans=0.5-(1.0*(k-x)/x)*(1.0*(3*x-k)/2/x);
            printf("%.2f\n",ans);
        }
        else if(k<x)
        {
            double ans=1.0-(1.0*k/x*k/x/2);
            printf("%.2f\n",ans);
        }
    }
}