洛谷P2822 組合數問題

2021-08-30 15:40:44 字數 1390 閱讀 1306

題目描述

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

​ 其中 n=1×2×⋯×n;特別地,定義 0!=1。

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

i是 k 的倍數。

輸入輸出格式

輸入格式:

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

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

輸出格式:

共 t行,每行乙個整數代表所有的0 ≤ i ≤ n,0 ≤ j ≤ min(i,m) 中有多少對 ( i, j ) 滿足 c_i^j是 k 的倍數。

輸入輸出樣例

輸入樣例#1:

1 23 3

輸出樣例#1:

1輸入樣例#2:

2 54 5

6 7輸出樣例#2:07

說明【樣例1說明】

在所有可能的情況中,只有c_2^1 =2是2的倍數。21

​【子任務】

這道題需要用到楊輝三角形(但是誰又能在考場上想到它呢…)。同時為了防止楊輝三角中的數過大,你還要記得隨時給它取模。

但是事情還沒有結束,為了能降低時間複雜度,我們需要把之前的o(n)修改變成o(1),那就用二維字首和維護吧。

#include#include#include#includeusing namespace std;

int t,k;

int s[2003][2003],c[2003][2003];

//c[m][n] = c[n - m][n]

int main()

} for(int i = 2;i <= 2000;i++)

s[i][i+1] = s[i][i];//更新梁輝三角的右邊

} while(t--)

return 0;

}

洛谷 P2822 組合數問題

已知組合數 從 n 個物品中選擇 m 個物品的方案數 c m n c n,m binom frac 其中 n 1 times 2 times 3 times cdots times n specially define 0 1 給定 n m k 對於所有的 0 le i le n 0 le j le...

洛谷P2822 組合數問題(題解)

題目傳送 先了解一下有關組合數的公式 m在上,n在下 發現組合數的遞推的直觀影象形式就是楊輝三角 第i行第j列的數等於c i 1,j 1 由於題目要求多組組合數,便可以遞推組合數做預處理 直接用通項公式算什麼的太粗暴 慢 了 一看資料範圍,保證讓普通範圍溢位的節奏啊,但定心一看,我們只用知道每個組合...

P2822 組合數問題

題目描述 組合數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 不清楚不要怪我,暫時找...