題目描述
組合數表示的是從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)有多少對 (i,j)滿足是k的倍數。
輸入格式
第一行有兩個整數t,k,其中t代表該
測試點總共有多少組測試資料,k的意義見問題描述。
接下來t行每行兩個整數n,m,其中n,m的意義見問題描述。
輸出格式
t行,每行乙個整數代表答案。
樣例輸入1
1 2
3 3
樣例輸出1
1 樣例輸入2
2 5
4 5
6 7
樣例輸出2
0 7
資料範圍
這道題其實是楊輝三角問題,因為最後的答案只要對k取餘,所以可以先算出每個c[n,m]對k取餘的值,用flag[n,m]儲存它能否整除k,最後的答案統計f[1..n,1..m]即可。
const
maxn=5000;
varf,flag:array[0..maxn,0..maxn]of longint;
i,j,t,k,n,m:longint;
begin
readln(t,k);
for i:=1 to maxn do
begin
a[i,1]:=i mod k;
a[i,i]:=1;
end;
for i:=3 to maxn do
for j:=2 to i-1 do
a[i,j]:=(a[i-1,j]+a[i-1,j-1]) mod k;
for i:=1 to maxn do
for j:=1 to i do
if a[i,j]=0 then
flag[i,j]:=1;
fillchar(a,sizeof(a),0);
for i:=1 to maxn do
for j:=1 to maxn do
a[i,j]:=a[i-1,j]+a[i,j-1]-a[i-1,j-1]+flag[i,j];
for i:=1 to t do
begin
read(n,m);
writeln(a[n,m]);
end;
end.
NOIP2016提高組day2 蚯蚓
本題中,我們將用符號 lcj 表示對 c 向下取整,例如 l3.0j l3.1j l3.9j 3 蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓們沒辦法,蛐蛐國王只好去 請神刀手來幫他們消滅蚯蚓。蛐蛐國裡現在共有 n 只蚯蚓 n 為正整數 每只蚯蚓擁有長度,我們設第 i 只匠 蚓的長度為 ai i ...
NOIP 2016 提高組 Day2 組合數問題
是我想起了有一年考過相似的題目 當時用的是楊輝三角。思路 遞推 矩陣字首和 關於矩陣字首和 c n,m c n 1,m c n 1,m 1 就可以直接遞推出2000以內的所有的組合數。而我們只需要判斷有多少個點對滿足是k的倍數,很容易想到只要對k取模,對於為0的c i,j 是肯定滿足是k的倍數的。因...
NOIP2016提高組 day2 組合數問題
總所周知 階乘int到14就爆了long long到20也就爆了,所以說直接存肯定是不行的 在觀察一下題目發現試求組合數是k的倍數,所以說可以把k作為mod,餘數為零肯定就是k的倍數啦,否則不是。又因為由二項式定理 易得二項式展開的每一項就包涵組合數的答案。我們又已知楊輝三角其實就是二項式的係數恰好...