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