P2822 組合數問題

2021-08-08 08:29:09 字數 1545 閱讀 4441

題目描述

組合數c_n^mc

​n​m

​​ 表示的是從n個物品中選出m個物品的方案數。舉個例子,從(1,2,3) 三個物品中選擇兩個物品可以有(1,2),(1,3),(2,3)這三種選擇方法。根據組合數的定 義,我們可以給出計算組合數的一般公式:

​​  c​n

​m​​

=​m!

(n−m

)!​​

n!​​

其中n! = 1 × 2 × · · · × n//不清楚不要怪我,暫時找不到圖。。。

小蔥想知道如果給定n,m和k,對於所有的0 <= i <= n,0 <= j <= min(i,m)有多少對 (i,j)滿足c_i^jc

​i​j

​​ 是k的倍數。

輸入輸出格式

輸入格式:

第一行有兩個整數t,k,其中t代表該測試點總共有多少組測試資料,k的意義見 【問題描述】。

接下來t行每行兩個整數n,m,其中n,m的意義見【問題描述】。

輸出格式:

t行,每行乙個整數代表答案。

輸入輸出樣例

輸入樣例#1:

1 23 3

輸出樣例#1:

1輸入樣例#2:

2 54 5

6 7輸出樣例#2:07

這其實是一道純粹的數論題,然而洛谷上的通過率還不到10%。。。

**如下(pascal)

const maxn=2001;

varf,flag:array[0..maxn,0..maxn]of longint;

i,j,k,t,n,m:longint;

begin

readln(t,k);

for i:=1 to maxn-1 do begin

f[i,1]:=i mod k; f[i,i]:=1; end;

for i:=3 to maxn-1 do

for j:=2 to i-1 do

f[i,j]:=(f[i-1,j]+f[i-1,j-1]) mod k;//對楊輝三角的維護,防止太大導致爆0~

for i:=1 to maxn-1 do

for j:=1  to  i do

if f[i,j]mod k=0 then flag[i,j]:=1;//也可以不要這個mod,因為上面已經mod了,能被k整除的對其進行flag標記

fillchar(f,sizeof(f),0);

for i:=1 to maxn-1 do

for j:=1 to maxn-1 do

f[i,j]:=f[i-1,j]+f[i,j-1]-f[i-1,j-1]+flag[i,j];//從f[1,1]開始找能被k整除的數的個數

for i:=1 to t do begin

readln(n,m);

writeln(f[n,m]);

end;

end.

其實最主要的地方就是找到楊輝三角後進行對陣列的維護~只有做了這題你才能發現數學的美妙╮(╯_╰)╭,唉,oi選手就是這麼命苦啊!不僅要把程式設計學好,還要把其他科學好。。。(語數英……)蒟蒻表示十分無奈。

P2822 組合數問題

小蔥想知道如果給定 n,m 和 k,對於所有的 0 i n,0 j min i,m 有多少對 i,j i,j 滿足 ci取j 是 k 的倍數。輸入格式 第一行有兩個整數 t,kt,k,其中 tt 代表該測試點總共有多少組測試資料,k 的意義見問題描述。接下來 tt 行每行兩個整數 n,m,其中 n,...

P2822組合數問題

題目鏈結 眾所周知,小蔥同學擅長計算,尤其擅長計算組合數。而且這道題與組合數有關係。乍一看什麼思路沒有,硬想柿子想了半小時。不知道結論,wtcl。後來打表發現規律,發現是個非常水的規律題,然後5min寫完 3min調 交上去ac了。題外話 自己寫的快讀掛了。模 k 下的楊輝三角,值為 0 的位置權值...

P2822 組合數問題

組合數 表示的是從n個物品中選出m個物品的方案數。舉個例子,從 1,2,3 三個物品中選擇兩個物品可以有 1,2 1,3 2,3 這三種選擇方法。根據組合數的定 義,我們可以給出計算組合數的一般公式 其中n 1 2 n 小蔥想知道如果給定n,m和k,對於所有的0 i n,0 j min i,m 有多...