[POJ 3734] Blocks 指数型生成函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[POJ 3734] Blocks 指数型生成函数相关的知识,希望对你有一定的参考价值。
题意
有红, 黄, 蓝, 绿四种颜色的砖头.
现在你要将 $n$ 个砖头放成一排.
蓝色, 绿色的砖头的个数必须为偶数.
问最终放置的方案数.
n <= 10 ^ 9 .
分析
构建指数型生成函数.
$R(x) = Y(x) = \sum_{k = 0} ^ {\infty} \frac{x ^ k}{k !} = e ^ x$ .
$B(x) = G(x) = \sum_{k = 0} ^ {\infty} \frac{x ^ {2k}}{(2k)!} = \frac{e ^ x + e ^ {-x}}{2}$ .
排列数为四种方案数的二项卷积, 所以排列的指数型生成函数等于四个指数型生成函数的卷积.
$F(x) = e ^ {2x} \frac{(e ^ x + e ^ {-x}) ^ 2}{4} = \frac{e ^ 4x + 2 e ^ {2x} + 1}{4}$ .
将 $e$ 展开, $\frac{x ^ k}{k!}$ 的系数为 $2 ^ {n - 1} + 4 ^ {n - 1}$ .
实现
1 #include <cstdio> 2 const int MOD = 10007; 3 int main(void) { 4 int nT; scanf("%d", &nT); 5 for (int i = 1; i <= nT; i++) { 6 int n; scanf("%d", &n); 7 n = (n-1) % (MOD-1); 8 int sum = 1; 9 for (int i = 1; i <= n; i++) 10 sum = sum * 2 % MOD; 11 printf("%d\n", (sum + sum * sum) % MOD); 12 } 13 return 0; 14 }
以上是关于[POJ 3734] Blocks 指数型生成函数的主要内容,如果未能解决你的问题,请参考以下文章