小奇的賞花(數學排列組合)

2022-05-09 08:36:10 字數 1780 閱讀 2752

題目描述

小奇的花園裡有n行m列棵桃花樹,花色各不相同。小奇漫步在花園中,有時它覺得某一行/列的桃花很美,便會在這一整行/列的每棵樹下撿一枚花瓣,到了傍晚,他發現自己選擇了r行c列(同一行/列可能被選擇不止一次)的花瓣。

回家之後,小奇發現:有s種顏色的花瓣數為奇數,他想知道,有多少種選擇方案能有這樣的效果呢?(兩種方案不同當且僅當某行/列被選擇的次數不同)

輸入格式

第一行包括5個整數,n,m,r,c,s。

輸出格式

輸出乙個整數表示答案(mod 1000000007)。

樣例樣例輸入

2 2 2 2 4
樣例輸出

4
資料範圍與提示

對於 20% 的資料, n,m ≤ 4,r,c ≤ 4;

對於 50% 的資料, n,m ≤ 500,r,c ≤ 2000;

對於另外10% 的資料, n,m ≤ 100000,s = n * m;

對於 100% 的資料, n,m ≤ 100000,r,c ≤ 100000,s ≤ 10^12。

思路:這就是一道裸的數學排列組合題,設有x行被選擇奇數次,有y列被選擇奇數次,因為奇+偶=奇,奇+奇=偶,偶+偶=偶,而題中s為奇數,則可列出這樣的等式:x*(m-y)+y*(n-x)=s,解得:y=(s-x*m)/(n-2*x),列舉x即可得出y,用每對x,y計算種類再加和,即為答案(分步加法)。那怎樣計算每對x,y對應的種類數呢,當然用組合數求解。

對於每對x,y,而題目中限制只有r次,問題可轉化成把r個蘋果分到n個盤子中,保證有x個奇數盤子,先把x個蘋果分別放到x個盤子中,方案數為cxn,之後剩下(r-x)個蘋果,把這些蘋果分成(r-x)/2對放到n個盤子中允許為空,用隔板法解決。防止(r-x)/2對蘋果填不滿n個盤子,加上n個盤子,則有(r-x)/2對蘋果和n個空分成n份放入n個不同的盤子(可以理解成有序)一共有(r-x)/2+n-1個空,插入n-1個隔板,方案數為cn-1

(r-x)/2+n-1    ,同理y也如此,則對每對x,y方案數為cxn*cn-1(r-x)/2+n-1*cy

m*cm-1

(c-y)/2+m-1

方案數用逆元求即可。

1 #include2 #include3

using

namespace

std;

4 typedef long

long

ll;5

const

int mod=1000000007,maxn=200000+10;6

ll r,c,n,m;

7ll f[maxn],fac[maxn],ine[maxn];

8ll s;

9void

init()

18 f[0]=1;19

for(int i=1;i<=200000;i++) f[i]=f[i-1]*ine[i]%mod;//

逆元的階乘20}

21ll cmb(ll x,ll y)//

組合數28 ll cal(int x,int

y)//

每對x,y對應的方案數

37int

main()//

注意列舉x時當(n==2*i&&s==i*m)此時j可取範圍以內的任何值 46}

47else52}

53}54 printf("

%lld\n

",ans);

55return0;

56 }

view code

排列 組合數學

定義 從n個不同的元素中,取出m個不同元素,按照順序排成一列,叫做從n個元素取出m個元素的乙個排列。我們將從n個不同的元素取出m個元素所得到得不同排列數,叫做從n個元素取出m個元素的排列數 記為a n,m 其中n m a n,m n n 1 n m 1 n n m 定義 n個不同元素中取m個不同元素...

數學基礎 排列組合

a開頭的叫排列,c開頭的叫組合。排列a n,m n n 1 n m 1 n n m n為下標,m為上標,以下同 組合c n,m p n,m p m,m n m n m 排列 permutation 數學的重要概念之一。有限集的子集按某種條件的序化法排成列 排成一圈 不許重複或許重複等。從n個不同元素...

數學上的排列組合

下午一同事提出乙個有趣的問題 一行字母 數字符號也行 中間插入特定字元 字元型別不定,我這裡用加號 字母的順序不能變,如下 ab a b 1種 abc a bc ab c a b c 3種 abcd a bcd ab cd a b cd abc d a bc d ab c d a b c d 7種 ...