1. 程式人生 > >[POJ 3734] Blocks 指數型生成函數

[POJ 3734] Blocks 指數型生成函數

blocks 偶數 con 實現 rac code ons 展開 藍色

題意

  有紅, 黃, 藍, 綠四種顏色的磚頭.

  現在你要將 $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 指數型生成函數