NOIP2016 D2 T1 組合數問題

2021-07-25 06:11:23 字數 1434 閱讀 9027

組合數

其中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行,每行乙個整數代表所有的0 <= i <= n,0 <= j <= min(i,m)有多少對 (i,j)滿足是k的倍數。

輸入樣例#1:

1 2

3 3

輸出樣例#1:

1輸入樣例#2:

2 5

4 5

6 7

輸出樣例#2: 0 7

【樣例1說明】

在所有可能的情況中,只有

考試的時候除了暴力沒有任何思路,所以就直接約分,拿了40分。

#include

#include

using

namespace

std;

int main()

for(int t=(i-j);t>=1;t--)

c=q/w;

if(c%m==0) ans++;}}

cout

0;}

正解:數論——楊輝三角形(然而考試的時候並無思路)

對於每乙個(n,m)

n m c

1 1 1

2 1 2

2 2 1

3 1 3

3 2 3

3 3 1

4 1 4

4 2 6

4 3 4

4 4 1

…… …… ……

再加乙個字首和處理即可ac

#include

#include

int s[2005][2005];

int ans[2005][2005];

using

namespace

std;

int main()

for(int i=1;i<2001;i++)

for(int j=1;j<2001;j++)

s[i][j]=(s[i][j-1]+s[i-1][j-1])%k;//楊輝三角

for(int i=1;i<2001;i++)

ans[i][i]=ans[i-1][i]; //處理邊界

if(s[i][i]=0) ans[i][i]++;

} while(t--)

return

0;}

NOIP2016 提高組Day2 T1 組合數問題

題目描述 組合數表示的是從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,...

NOIP2016 Day2T1 組合數 90分

題目描述 組合數表示的是從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,...

組合數問題 NOIP 2016 Day2 T1

題目描述 組合數 表示的是從n個物品中選出m個物品的方案數。舉個例子,從 1,2,3 三個物品中選擇兩個物品可以有 1,2 1,3 2,3 這三種選擇方法。根據組合數的定 義,我們可以給出計算組合數的一般公式 cm n n m n m 其中n 1 2 n 小蔥想知道如果給定n,m和k,對於所有的0 ...