题意:(转化)题目可以抽象为某个01串全排列该位置与前一个位置不同或者第一位为0的数量期望。(0的数量是X,1的数量是Y)
思路:期望题。首先我们假设所有的01各不相同,总的方案数就有(x+y)!
我们把01看成一个数字,(x+y-1)个数字全排列的个数为(x+y-1)!,总共有xy个不同的01,01互换位置的话有2xy
把0放在第一位有X种,后面任意排列(x+y-1)!
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define dep(i,a,b) for(int i=b;i>=a;i--)
using namespace std;
#define ll long long
const int N=3e5+5;
const int mod = 998244353;
ll rd()
{
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int main()
{
int T,cas=0,n,s;
T=rd();
while(T--)
{
n=rd();s=rd();
double y=s-2*n,x=n-y;
double ans=0;
ans=(2.0*x*y+y)/(1.0*n);
printf("Case %d: %.7lf\n", ++cas, ans);
}
}