题目如下:
红黄蓝三种颜色的糖各n块,排成一行,要求相邻两块糖颜色不同,求方案数。
—— From zhengrui
- 1<=n <= 1e6
一眼就是组合数题- 考虑红球被分成k段,那么需要用黄球插入k - 1个隔板,那么方案数为 C k − 1 n − 1 C_{k -1}^{n - 1} Ck−1n−1,那么同理 : 黄球被分成t段的方案数为 C t − 1 n − 1 C_{t - 1}^{n - 1} Ct−1n−1,然后考虑几种情况:
-
k段两端均为黄球
-
一端为黄球,一段为红球,注意 : 这会有两种情况
-
两段均为红球
-
最终式子为 C k − 1 n − 1 ∗ C t − 1 n − 1 ∗ ( 1 + ( t = = k ) ) C_{k -1}^{n - 1} * C_{t- 1}^{n - 1} *(1 + (t == k)) Ck−1n−1∗Ct−1n−1∗(1+(t==k))
-
考虑蓝球的情况 :总共有 2 n − 1 2n - 1 2n−1块隔板,其中两侧不同的隔板有 k + t + 1 k + t + 1 k+t+1个(开头结尾也要算),那么相同的情况为 2 n − 1 − ( k + t − 1 ) 2n - 1 - (k + t - 1) 2n−1−(k+t−1)即 2 n − k − t 2n - k - t 2n−k−t种,相同肯定要放没有选择,能用的球仅剩 n − ( 2 n − k − t ) n - (2n - k - t) n−(2n−k−t)个,即 k + t − n k +t - n k+t−n个,方案为 C k + t − n k + t + 1 C_{k + t - n}^{k + t + 1} Ck+t−nk+t+1,简化一下 C k + t + 1 n + 1 C_{k + t + 1}^{n + 1} Ck+t+1n+1;
-
总的式子为 C n − 1 k − 1 ∗ C n − 1 t − 1 ∗ ( 1 + ( t = = k ) ) ∗ C k + t + 1 n + 1 C_{n - 1}^{k - 1} * C_{n - 1}^{t - 1}*(1 +(t == k))*C_{k + t + 1}^{n + 1} Cn−1k−1∗Cn−1t−1∗(1+(t==k))∗Ck+t+1n+1,值得注意的是: C n m C_{n}^{m} Cnm中 n < m , m < 0 n < m,m < 0 n<m,m<0时为0。
思路懂了,代码应该有手就行吧。