P2822. 组合数问题
考点
- 排列组合
题解
1 |
|
思路
求解组合数的模板题,先根据《深基》的几张图来回顾一下杨辉三角吧




先将2000以内的组合数打表求出
那样数字会过于庞大,好在题意是求能否整除k
;所以每次只保存模k
的值即可(模运算不影响加法乘法)
当然,组合数数组需要初始化为-1
而不是常规的0
,否则不能确定到底是模k
后得到的0
还是初始就是0
从杨辉三角的视角看,题目每次询问的是二维数组某一区间内,模k
后为0的组合数个数
所以用二维前缀和再次打表!
比如n = 3, m = 3, k = 2
的话,求\(\left\{
C_{0}^{0},C_{1}^{0},C_{1}^{1},C_{2}^{0},C_{2}^{1},C_{2}^{2},C_{3}^{0},C_{3}^{1},C_{3}^{2},C_{3}^{3}
\right\}\)中模k
后等于0的个数
用帕斯卡公式求出的组合数数组
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1 | -1 | -1 | -1 |
1 | 1 | 1 | -1 | -1 |
2 | 1 | 2 | 1 | -1 |
3 | 1 | 3 | 3 | 1 |
对k
取模后,组合数数组如下
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1 | -1 | -1 | -1 |
1 | 1 | 1 | -1 | -1 |
2 | 1 | 0 | 1 | -1 |
3 | 1 | 1 | 1 | 1 |
很明显只有\(C_{2}^{1}\)是满足条件的,答案为1