NOIP2017提高A組模擬9 17 組合數問題

2022-05-05 16:51:15 字數 1144 閱讀 2251

定義"組合數"s(n,m)代表將n 個不同的元素拆分成m 個非空集合的方案數.

舉個例子,將拆分成2 個集合有(,),(,),(,)三種拆分方法.

小貓想知道,如果給定n,m 和k,對於所有的0<=i<=n,0<=j<=min(i,m),有多少對(i,j),滿足s(i,j)是k 的倍數.

注意,0 也是k 的倍數,s(0,0)=1,對於i>=1,s(i,0)=0.

從problem.in 種讀入資料第一行有兩個整數t,k,t 代表該測試點總共有多少組測試資料.接下來t 行,每行兩個整數n,m.

輸出到檔案problem.out 中t 行,每行乙個整數代表所有的0<=i<=n,0<=j<=min(i,m),有多少對(i,j),滿足s(i,j)是k 的倍數.

輸入1:

1 23 3

輸入2:

2 54 5

6 7輸出1:

3樣例說明1:s(1,0),s(2,0),s(3,0)均是2 的倍數

輸出2:412

對於20%的資料,滿足n,m<=7,k<=5

對於60%的資料,滿足n,m<=100,k<=10

對於每個子任務,都有50%的資料滿足t=1

對於100%的資料,滿足1<=n<=2000,1<=m<=2000,2<=k<=21,1<=t<=10000

第二類斯特林數

公式:\(s(i,j)=s(i-1,j-1)+j*s(i-1,j)\)

證明

當前這個元素新開乙個集合,\(s(i-1,j-1)\)

當前這個元素進入乙個原本存在的集合 \(j*s(i-1,j-1)\)

根據加法定理,兩者相加就是答案

預處理的同時\(\%k\)

然後用二維字首和統計0的個數

#include#include#define ull unsigned long long

using namespace std;

int t,k,k1,n,m,c[2001][2001],s[2001][2001];

int read()

int main()

fclose(stdin);

fclose(stdout);

return 0;

}

Noip2017提高組 乳酪

noip 2017 提高組 不怎麼難啦 思路如下 首先先寫乙個函式判斷兩個洞是否相連,即兩洞之間距離是否小於等於球直徑 注意是直徑 struct dong dong p 1001 bool pd dong a,dong b 第二個難點在於如何判斷是否可以穿過乳酪,對此我們可以模擬老鼠鑽洞 run函式...

NOIP2017提高組 列隊

noip2017提高組 day2 t3 sylvia 是乙個熱愛學習的女孩子。前段時間,sylvia 參加了學校的軍訓。眾所周知,軍訓的時候需要站方陣。sylvia 所在的方陣中有 n m 名學生,方陣的行數為 n,列數為 m 為了便於管理,教官在訓練開始時,按照從前到後,從左到右的順序給方陣中的學...

NOIP 2017 提高組 寶藏

傳送門 參與考古挖掘的小明得到了乙份藏寶圖,藏寶圖上標出了 n nn 個深埋在地下的寶藏屋,也給出了這 n nn 個寶藏屋之間可供開發的 m mm 條道路和它們的長度。小明決心親自前往挖掘所有寶藏屋中的寶藏。但是,每個寶藏屋距離地面都很遠,也就是說,從地面打通一條到某個寶藏屋的道路是很困難的,而開發...