【2018/10/04测试T2】【WOJ 4037】排队

【题目】

题目描述:

在成都某中学有 m 个男生与 n 个女生排队,这个学校的女生比较古怪,从某个位置(包含这个位置)开始往前数,男生的数量超过了女生的数量,女生会感觉不安全,于是会大叫起来,为了构建和谐校园,安排队伍时应该避免这样的情况。请你计算出不会引发尖叫的排队方案的概率。(排队方案不同定义:当且仅当某个某个位置人不一样,如男生 A、男生 B ,与男生 B、男生 A ,2 个排列是不同方案)

输入格式:

第一行 1 个整数, 表示测试数据的组数。

每个数据 有两个数 n , mn 个女生,m 个男生)

输出格式:

对于每组数据,输出一个实数(保留到小数点后 6 位)

样例数据:

输入

3
1 0
0 1
1 1

输出

1.000000
0.000000
0.500000

备注:

【样例解释】

第一组:只有一个女生,一种方案且可行

第二组:只有一个男生,一种方案且不行

第三组:两种方案女、男可行,男、女不可行,可行概率 0.5

【数据规模】

30%的数据: 测试组数 ≤ 10,0 ≤ n , m ≤ 1000

100%的数据: 测试组数 = 9008,0 ≤ n , m ≤ 20000

 

【分析】

找规律找到的满分。。。

先说一下答案,答案其实找规律很容易找出来,要按以下两种情况分类:

  1. 当 n < m 时,ans=0
  2. 当 n ≥ m 时,ans=\frac{n-m+1}{n+1}

对于情况 1,很容易可以看出来,直接来说情况 2 吧。

我们可以将原问题转化一下,看成是在一个二维平面上行走,女生看成移动(1,0),男生看成移动(0,1),那么到达(N,M)点且路线又不走到 y=x 这条直线上方的路线总数就是答案,这个组合问题很经典,总方案数为 (^{m+n}_{\; \; \; \, n}),不合法的是 (^{n+m}_{m-1}),减掉之后就得到 \frac{n-m+1}{n+1}

 

【代码】

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
//	freopen("fseq.in","r",stdin);
//	freopen("fseq.out","w",stdout);
	int n,m,i,t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&m);
		if(m>n)  printf("0.000000\n");
		else  printf("%.6lf\n",1.0*(n-m+1)/(n+1));
	}
//	fclose(stdin);
//	fclose(stdout);
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值