加法原理
(n)类元素,第(i)类有(c_i)个元素,选一个元素的方案数。
乘法原理
(n)组元素,第(i)组有(c_i)个元素,每组选一个元素的方案数。
排列数
从(n)个不同元素中,任选(m)个进行排列的方案数。
组合数
从(n)个不同元素中,任选(m)个的方案数。
加法原理得,方案数为 (不取第n个的方案数+取第n的方案数)
计算(C_n^mmod p)
·(x,yle 1000)
直接递推预处理。
·(x,yle 10^5),(p)是质数
预处理(1!,2!,dots,100000!)
然后直接套公式,取模使用逆元。
·(x,yle 10^{18}),(p)是质数,(ple 10^5)
Lucas定理
套一下就可以了。
·(x,y,ple 10^5)
线性筛后对(1,2,dots,n)分解质因数,计算每种质因子出现的次数,然后把对所有质因数求个答案,最后乘起来就OK了。
·(x,yle 10^9,p^cle10^5),对(p^c)取模
鸽了。
插板法
(x_1+x_2+dots+x_n=m)的正整数解的个数(有序)。
把(m)看成(m)个(1),中间有(m-1)个空隙,分成(n)个就是插(n-1)块板。
长度为(n),值域为([1,m])的不下降子序列个数
设序列为(a_1,a_2,dots,a_n)
由题意得,(a_1le a_2ledotsle a_n)
可以做差分数组(c),(c_i=a_i-a_{i-1})
转化后题目变为
(c_1+c_2+dots+c_nle m)的正整数解的个数(有序)。
二项式定理
感性证明。
((x+y)^n)可以看作(n)个((x+y))相乘。
枚举(x)出现了几次。取了(i)个(x),就要取(n-i)个(y)。
乘上组合数(C_n^i)就是有多少种选取(i)个(x)的方式。
算这玩意:
直接套二项式定理。
上面这东西就是
注意(n=0)时答案为(1)。
从(n)个人中选出不超过(k)个人,再在选出的人中选出一些人成为队员,再在队员中选出一个队长,求不同的方案数,答案(mod8388608)。
有(T)组询问,(Tle10^4,kle nle10^5)
暴力的式子:
先优化下后面:
带回去:
因为模数(8288608=2^{23}),所以直接枚举,(i)超过(23)就不枚举。
在一个(n)维无限空间中,一开始原点处有一个细胞。 每秒中所有原有细胞都会消亡,并且都在与其曼哈顿距离恰为(1)的所有位置新增一个细胞。求(T)秒后,原点处会有多少细胞。
(Q)组询问。(Qle20000,nle100,Tle200)
问题等价于求有多少回到原点的长度为(T)的路径。
把每一维分开考虑,设(f_{i,j})为(i)个维度,长度为(2j)的回到原点路径条数。
考虑转移。
枚举这个维度的步数(2 k),从(f_{i-1,j-k})转移。
总共有(2 j)步,从(2j)里选(2k)步的方案数为(C_{2j}^{2k})
从(2k)步里选(k)步往左,另外(k)步往右的方案数为(C_{2k}^k)
可得转移方程