1. 程式人生 > >2018.10.04 NOIP模擬 排隊(組合數學)

2018.10.04 NOIP模擬 排隊(組合數學)

描述

在成都某中學有m個男生與n個女生排隊,這個學校的女生比較古怪,從某個位置(包含這個位置)開始往前數,男生的數量超過了女生的數量,女生會感覺不安全,於是會大叫起來,為了構建和諧校園,安排隊伍時應該避免這樣的情況。請你計算出不會引發尖叫的排隊方案的概率。(排隊方案不同定義:當且僅當某個某個位置人不一樣,如男生A、男生B ,與男生B、男生A ,2個排列是不同方案)

輸入

第一行1個整數, 表示測試資料的組數。 每個資料 有兩個數 N,M(N個女生,M個男生)

輸出

對於每組資料,輸出一個實數(保留到小數點後 6 位)

樣例輸入

3 1 0 0 1 1 1

樣例輸出

1.000000 0.000000 0.500000

提示

【 Hint】 第一組:只有一個女生,一種方案且可行 第二組:只有1個男生,一種方案且不行 第三組:兩種方案 女、男可行,男、女不可行,可行概率0.5

【資料規模】

30%的資料: (測試組數<=10),(0<=N,M<=1000). 100%的資料: (測試組數=9008 ), ( 0<=N,M<=20000 ).

T2原題啊。 直接組合數學求出合法方案數,再除去一個(n+m)!(n+m)!ans=0(n&lt;m)ans=0(n&lt;m) ans=n+1mn+1(mn)ans=\frac {n+1-m} {n+1} (m\le n) 程式碼:

#include<bits/stdc++.h>
#define N 100005
using namespace
std; int t,n,m; int main(){ freopen("fseq.in","r",stdin); freopen("fseq.out","w",stdout); scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); if(n<m){puts("0.000000");continue;} printf("%.6lf\n",(double)((double)n+1-m)/((double)n+1)); } return 0; }