1. 程式人生 > >P2822 組合數問題

P2822 組合數問題

png tle sticky https times left ron -s 所有

P2822 組合數問題

  • 標簽:NOIp提高組 2016 雲端↑
  • 難度: 普及+/提高
  • 時空限制: 1s / 512MB

題目描述

組合數技術分享表示的是從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

說明

【樣例1說明】

在所有可能的情況中,只有技術分享是2的倍數。

【子任務】

技術分享

思路分析:

這個題第一反應50分穩了。打打暴力折騰50分出來。n=1的點AC其他TLE...

樣例一好像沒什麽用處。。。所以看看樣例二能搞出什麽東西來。

手推一下樣例二:

\begin{matrix}
C^0_0&&&&&\\
C^0_1&C^1_1&&&&\\
C^0_2&C^1_2&C^2_2&&&\\
C^0_3&C^1_3&C^2_3&C^3_3&&\\
C^0_4&C^1_4&C^2_4&C^3_4&C^4_4&\\
C^0_5&C^1_5&C^2_5&C^3_5&C^4_5&C^5_5

\end{matrix}

套一下公式。

忽略m或n等於0的情況,這個時候組合數無意義。

結合上面的矩陣:

\begin{matrix}
1&0&0&0&0&0\\
2&1&0&0&0&0\\
3&3&1&0&0&0\\
4&6&4&1&0&0\\
5&10&10&5&1&0\\
6&15&20&15&6&1
\end{matrix}

可以看出這是一個楊輝三角。楊輝三角的一般遞推式:

\begin{equation*}f[i][j]=f[i-1][j-1]+f[i-1][j]\end{equation*}

楊輝三角的初始化:

\begin{equation*}f[i][1]=i,f[i][i]=1\end{equation*}

P2822 組合數問題