[POJ 3734] Blocks 指數型生成函數
阿新 • • 發佈:2017-08-25
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 指數型生成函數