【NOIP校内模拟】排队

【题意】
在成都某中学有 m 个男生与 n 个女生排队,这个学校的女生比较古怪,从某个位
置(包含这个位置)开始往前数,男生的数量超过了女生的数量,女生会感觉不安全,于
是会大叫起来,为了构建和谐校园,安排队伍时应该避免这样的情况。请你计算出不会引
发尖叫的排队方案的概率。(排队方案不同定义:当且仅当某个某个位置人不一样,如男
生A、男生B ,与男生B、男生A ,2个排列是不同方案)
【 Input】
第一行1个整数, 表示测试数据的组数。
每个数据 有两个数 N,M(N个女生,M个男生)
【 Output】
对于每组数据,输出一个实数(保留到小数点后 6 位)
【 Sample Input】
3
1 0
0 1
1 1
【 Sample Output】
1.000000
0.000000
0.500000

听说是一个原题 SCOI2010生成字符串

如果直接用数学方法做看起来并不好做,转换一下;

在一个平面直角坐标系中,从点(0,0)到点(n + m,n - m),

一个女生相当于从(0,0)向(1,1)的方向走,一个男生相当于(0,0)向(1,-1)的方向走,同时不能走到直线y = -1上

由于n个1,m个0必然要走到(n + m, n - m),求方案数,

先考虑没有限制条件的,可以发现n个1是必须取完的一共要取n + m个数,

那么要在n + m个数中取n个数,自然方案数就是C(n + m,n),

那么我们怎么求出不符合条件的方案数呢?

可以想象一下把直线y = -1上面的翻折下来,即从点(0,-2)到点(n + m, n - m)经过直线y = -1的方案数,显而易见,肯定经过直线y=-1,

走到(n+m,n-m)需要向上走n-m+2次,一共要走n+m次。设向上向下各走x,y,那么x+y=n+m,x-y=n-m+2得到x=n+1,y=m-1,所以不合法的方案为C(n+m,n + 1)。

然后约分 就一句话了

#include<bits/stdc++.h>
using namespace std;
int T;
double n,m;
int main()
{
    //QWQQWQWQWQWQWQWQWQWQWQWQWQWQWQWQWQWQWQWQ
    freopen("fseq.in","r",stdin);
    freopen("fseq.out","w",stdout);
    cin>>T;
    while(T--)
    {
        cin>>n>>m;
        if(m>n) puts("0.000000");
        else cout<<fixed<<setprecision(6)<<(n-m+1)/(n+1)<<'\n';
    }
    return 0;
} 

转载于:https://www.cnblogs.com/Patrickpwq/articles/9742276.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现功能  计算平均值Avg:包括每门课程的平均值,和每个学生所有课程的平均值。  计算最高分Max:包括每门课程的最高分,和学生平均分的最高分,并给出最高分对应的学生姓名和学号。  计算最低分Min:包括每门课程的最低分,和学生平均分的最低分,并给出最低分对应的学生姓名和学号。  计算每门课程成绩不及格(<60分)以及优秀(大于90分)的学生个数Count。  计算每门课程的标准方差Variance。  查询功能Query:可以根据输入的学生姓名或者学号,查询该学生的所有课程的成绩。  排序功能Sort:按照从高到低的顺序,对每门课程的成绩进行排序,对学生平均分进行排序,并给出排序后成绩所对应的学生姓名和学号。 实现功能  计算平均值Avg:包括每门课程的平均值,和每个学生所有课程的平均值。  计算最高分Max:包括每门课程的最高分,和学生平均分的最高分,并给出最高分对应的学生姓名和学号。  计算最低分Min:包括每门课程的最低分,和学生平均分的最低分,并给出最低分对应的学生姓名和学号。  计算每门课程成绩不及格(<60分)以及优秀(大于90分)的学生个数Count。  计算每门课程的标准方差Variance。  查询功能Query:可以根据输入的学生姓名或者学号,查询该学生的所有课程的成绩。  排序功能Sort:按照从高到低的顺序,对每门课程的成绩进行排序,对学生平均分进行排序,并给出排序后成绩所对应的学生姓名和学号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值