[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 指数型生成函数的主要内容,如果未能解决你的问题,请参考以下文章

POJ3734Blocks(递推+矩阵快速幂)

POJ 3734 Blocks

POJ 3734 Blocks(矩阵快速幂加递推)

POJ 3734 Blocks (矩阵快速幂)

poj3734 Blocks

poj3734 Blocks[矩阵优化dp or 组合数学]