題目描述
組合數c_n^mc
nm
表示的是從n個物品中選出m個物品的方案數。舉個例子,從(1,2,3) 三個物品中選擇兩個物品可以有(1,2),(1,3),(2,3)這三種選擇方法。根據組合數的定 義,我們可以給出計算組合數的一般公式:
cn
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
ij
是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 有多...