生成函数Ⅰ

2022年7月5日和6日,day02

形式幂级数

多项式与形式幂级数

  • 多项式: A ( x ) = ∑ i = 0 n a i x i A(x)=\sum_{i=0}^{n}a_ix^i A(x)=i=0naixi
  • 形式幂级数: A ( x ) = ∑ i ≥ 0 a i x i A(x)=\sum_{i\ge 0}a_ix^i A(x)=i0aixi
    其中 a i ∈ K a_i\in K aiK K K K 是一个域,通常,我们考虑 K = R K=\R K=R K = Z p K=\Z_p K=Zp
    注意这里的 x x x 可以理解为一个独立于域 K K K 的一个符号。

形式幂级数的运算

A ( x ) = ∑ i ≥ 0 a i x i A(x)=\sum_{i\ge 0}a_ix^i A(x)=i0aixi B ( x ) = ∑ i ≥ 0 b i x i B(x)=\sum_{i\ge 0}b_ix^i B(x)=i0bixi

  • 加法: A ( x ) + B ( x ) = ∑ i ≥ 0 ( a i + b i ) x i A(x)+B(x)=\sum_{i\ge 0}(a_i+b_i)x^i A(x)+B(x)=i0(ai+bi)xi
  • 减法: A ( x ) − B ( x ) = ∑ i ≥ 0 ( a i − b i ) x i A(x)-B(x)=\sum_{i\ge 0}(a_i-b_i)x^i A(x)B(x)=i0(aibi)xi
  • 乘法: A ( x ) × B ( x ) = ∑ k ≥ 0 ( ∑ i + j = k a i b j ) x k A(x)\times B(x)=\sum_{k\ge 0}(\sum_{i+j=k}a_ib_j)x^k A(x)×B(x)=k0(i+j=kaibj)xk
    可以验证,形式幂级数在以上定义的 + + + − - × \times × 下形成一个环。
  • 记号:记形式幂级数(或多项式) A ( x ) A(x) A(x) x n x^n xn 项的系数为 [ x n ] A ( x ) [x^n]A(x) [xn]A(x)

常生成函数

定义:一个数列 { a n } \{a_n\} {an} 对应的常生成函数为 A ( x ) = ∑ n ≥ 0 a n x n A(x)=\sum_{n\ge 0}a_nx^n A(x)=n0anxn

例子:

  • 有两种物体,其中取 i i i 个第 1 种物体的方案数为 a i a_i ai ,取 j j j 个第 2 种物体的方案数为 b j b_j bj ,求取 k k k 个物体的方案数。

令 A ( x ) = ∑ i ≥ 0 a i x i , B ( x ) = ∑ i ≥ 0 b i x i 。 则 c k = ∑ i = 0 k a i b k − i C ( x ) = ∑ k ≥ 0 ∑ i = 0 k a i b k − i x k = A ( x ) × B ( x ) 令 A(x)=\sum_{i\ge 0}a_ix^i,B(x)=\sum_{i\ge 0}b_ix^i。\\ 则 c_k=\sum_{i=0}^{k}a_ib_{k-i}\\ C(x)=\sum_{k\ge 0}\sum_{i=0}^{k}a_ib_{k-i}x^k=A(x)\times B(x) A(x)=i0aixiB(x)=i0bixick=i=0kaibkiC(x)=k0i=0kaibkixk=A(x)×B(x)

答案为 [ x k ] C ( x ) [x^k]C(x) [xk]C(x)

  • 在一个自助水果店,有苹果、香蕉、草莓三种水果,你可以取 n n n 个水果,但是水果店要求,取的苹果数量必须是偶数,取的香蕉数量必须是 3 3 3 的倍数,取的草莓数量不能超过 5 5 5 个。求有多少种取 n n n 个水果的方案。

苹 果 : A ( x ) = ∑ i ≥ 0 ,   2 ∣ i x i = 1 + x 2 + x 4 + x 6 + ⋯ 香 蕉 : B ( x ) = ∑ i ≥ 0 ,   3 ∣ i x i = 1 + x 3 + x 6 + x 9 + ⋯ 草 莓 : C ( x ) = ∑ i = 0 5 x i = 1 + x + x 2 + x 3 + x 4 + x 5 S ( x ) = A ( x ) B ( x ) C ( x ) 苹果: A(x)=\sum_{i\ge 0,\ 2|i}x^i=1+x^2+x^4+x^6+\cdots \\ 香蕉: B(x)=\sum_{i\ge 0,\ 3|i}x^i=1+x^3+x^6+x^9+\cdots \\ 草莓: C(x)=\sum_{i=0}^5x^i=1+x+x^2+x^3+x^4+x^5 \\ S(x)=A(x)B(x)C(x) A(x)=i0, 2ixi=1+x2+x4+x6+B(x)=i0, 3ixi=1+x3+x6+x9+C(x)=i=05xi=1+x+x2+x3+x4+x5S(x)=A(x)B(x)C(x)

答案为 [ x n ] S ( x ) [x^n]S(x) [xn]S(x)

  • 求不定方程 x 1 + x 2 + ⋯ + x k = n x_1+x_2+\cdots+x_k=n x1+x2++xk=n 的解的数量,其中 x i x_i xi 为整数,且 l i ≤ x i ≤ r i , ( 1 ≤ i ≤ k ) l_i\le x_i\le r_i, (1\le i\le k) lixiri,(1ik)

定 义 : F i ( x ) = x l i + x l i + 1 + x l i + 2 + ⋯ + x r i F ( x ) = F 1 ( x ) × F 2 ( x ) × ⋯ × F k ( x ) 定义:F_i(x)=x^{l_i}+x^{l_i+1}+x^{l_i+2}+⋯+x^{r_i}\\ F(x)=F_1(x)\times F_2(x)\times \cdots \times F_k(x) Fi(x)=xli+xli+1+xli+2++xriF(x)=F1(x)×F2(x)××Fk(x)

答案为 [ x n ] F ( x ) [x^n]F(x) [xn]F(x)

  • x 1 + 2 x 2 + 3 x 3 = n x_1+2x_2+3x_3=n x1+2x2+3x3=n 的正整数解的个数。

F 1 ( x ) = ∑ i ≥ 1 x i = x + x 2 + x 3 + ⋯ F 2 ( x ) = ∑ i ≥ 1 ,   2 ∣ i x i = x 2 + x 4 + x 6 + ⋯ F 3 ( x ) = ∑ i ≥ 1 ,   3 ∣ i x i = x 3 + x 6 + x 9 + ⋯ F ( x ) = F 1 ( x ) F 2 ( x ) F 3 ( x ) F_1(x)=\sum_{i\ge 1}x^i = x + x^2 + x^3 + \cdots \\ F_2(x)=\sum_{i\ge 1,\ 2|i}x^i=x^2 + x^4 + x^6 + \cdots \\ F_3(x)=\sum_{i\ge 1,\ 3|i}x^i=x^3 + x^6 + x^9 + \cdots \\ F(x)=F_1(x)F_2(x)F_3(x) F1(x)=i1xi=x+x2+x3+F2(x)=i1, 2ixi=x2+x4+x6+F3(x)=i1, 3ixi=x3+x6+x9+F(x)=F1(x)F2(x)F3(x)

答案为 [ x n ] F ( x ) [x^n]F(x) [xn]F(x)

定理:设 S = { a 1 , a 2 , … , a k } S=\{a_1, a_2, \dots ,a_k\} S={a1,a2,,ak},且 a i a_i ai 可以取的次数的集合为 M i M_i Mi ,记 F i ( x ) = ∑ u ∈ M i x u F_i(x)=\sum_{u\in M_i}x^u Fi(x)=uMixu,则从 S S S 中取 n n n 个元素组合成集合的方案数 g ( n ) g(n) g(n) 的常生成函数 G ( x ) = ∑ i ≥ 0 g ( i ) x i G(x)=\sum_{i\ge 0}g(i)x^i G(x)=i0g(i)xi,满足:
G ( x ) = F 1 ( x ) F 2 ( x ) ⋯ F k ( x ) G(x)=F_1(x)F_2(x)\cdots F_k(x) G(x)=F1(x)F2(x)Fk(x)

形式幂级数的逆元

  • 形式幂级数 A ( x ) A(x) A(x) 的逆元: A ( x ) B ( x ) = 1 A(x)B(x)=1 A(x)B(x)=1
  • 逆元存在条件: [ x 0 ] A ( x ) ≠ 0 [x^0]A(x)\not=0 [x0]A(x)=0
  • 暴力计算方法:递推

假设

A ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n + ⋯ B ( x ) = b 0 + b 1 x + b 2 x 2 + ⋯ + b n x n + ⋯ A ( x ) B ( x ) = a 0 b 0 + ( a 0 b 1 + a 1 b 0 ) x + ⋯ + ( a 0 b n + a 1 b n − 1 + ⋯ + a n b 0 ) x n + ⋯ = 1 A(x) = a_0 + a_1x + a_2x^2 + \cdots + a_nx^n + \cdots \\ B(x) = b_0 + b_1x + b_2x^2 + \cdots + b_nx^n + \cdots \\ A(x)B(x)=a_0b_0 + (a_0b_1+a_1b_0)x + \cdots + (a_0b_n+a_1b_{n-1}+\cdots +a_nb_0)x^n + \cdots=1 A(x)=a0+a1x+a2x2++anxn+B(x)=b0+b1x+b2x2++bnxn+A(x)B(x)=a0b0+(a0b1+a1b0)x++(a0bn+a1bn1++anb0)xn+=1

那么

a 0 b 0 = 1 ⇒ b 0 = a 0 − 1 a 0 b 1 + a 1 b 0 = 0 ⇒ b 1 = − ( a 1 b 0 ) a 0 − 1 ⋮ ( a 0 b n + a 1 b n − 1 + ⋯ + a n b 0 ) = 0 ⇒ b n = − ( a 1 b n − 1 + ⋯ a n b 0 ) a 0 − 1 ⋮ \begin{aligned} a_0b_0=1 & \Rightarrow b_0 = a_0^{-1}\\ a_0b_1+a_1b_0 = 0 & \Rightarrow b_1 = -(a_1b_0)a_0^{-1}\\ &\vdots\\ (a_0b_n+a_1b_{n-1}+\cdots +a_nb_0)=0 & \Rightarrow b_n=-(a_1b_{n-1}+\cdots a_nb_0)a_0^{-1}\\ &\vdots \end{aligned} a0b0=1a0b1+a1b0=0(a0bn+a1bn1++anb0)=0b0=a01b1=(a1b0)a01bn=(a1bn1+anb0)a01

常见的逆:

  • A ( x ) = 1 + x + x 2 + ⋯ A(x)=1+x+x^2+\cdots A(x)=1+x+x2+ B ( x ) = 1 − x B(x)=1-x B(x)=1x,即 1 1 − x = ∑ i ≥ 0 x i \frac{1}{1-x}=\sum_{i\ge 0}x^i 1x1=i0xi
  • A ( x ) = 1 + a x + a 2 x 2 + ⋯ A(x)=1+ax+a^2x^2+\cdots A(x)=1+ax+a2x2+ B ( x ) = 1 − a x B(x)=1-ax B(x)=1ax,即 1 1 − a x = ∑ i ≥ 0 a i x i \frac{1}{1-ax}=\sum_{i\ge 0}a^ix^i 1ax1=i0aixi
  • A ( x ) = ( k − 1 0 ) + ( k 1 ) x + ( k + 1 2 ) x 2 + ( k + 2 3 ) x 3 + ⋯ A(x)=\binom{k-1}{0}+\binom{k}{1}x+\binom{k+1}{2}x^2+\binom{k+2}{3}x^3+\cdots A(x)=(0k1)+(1k)x+(2k+1)x2+(3k+2)x3+ B ( x ) = ( 1 − x ) k B(x)=(1-x)^k B(x)=(1x)k,即 1 ( 1 − x ) k = ∑ i ≥ 0 ( i + k − 1 i ) x i \frac{1}{(1-x)^k}=\sum_{i\ge 0}\binom{i+k-1}{i}x^i (1x)k1=i0(ii+k1)xi

A ( x ) = ( 1 + x + x 2 + x 3 + ⋯   ) k 其 中 [ x n ] A ( x ) ⇔ x 1 + x 2 + ⋯ + x k = n , ( x i ≥ 0 ) 方 案 数 : ( n + k − 1 k − 1 ) = ( n + k − 1 n ) A(x)=(1+x+x^2+x^3+\cdots)^k \\ 其中[x^n]A(x)\Leftrightarrow x_1+x_2+\cdots+x_k=n,(x_i\ge 0)\\ 方案数:\binom{n+k-1}{k-1}=\binom{n+k-1}{n} A(x)=(1+x+x2+x3+)k[xn]A(x)x1+x2++xk=n(xi0)(k1n+k1)=(nn+k1)

例题1:https://ac.nowcoder.com/acm/contest/24710/A

  • 肥宅快乐水最多1个: 1 + x 1+x 1+x
  • 大盘鸡最多2个: 1 + x + x 2 1+x+x^2 1+x+x2
  • 啤酒鸡最多3个: 1 + x + x 2 + x 3 1+x+x^2+x^3 1+x+x2+x3
  • 鸡翅偶数个: 1 + x 2 + x 4 + ⋯ = 1 1 − x 2 = 1 ( 1 − x ) ( 1 + x ) 1+x^2+x^4+\cdots=\frac{1}{1-x^2}=\frac{1}{(1-x)(1+x)} 1+x2+x4+=1x21=(1x)(1+x)1
  • 鸡汤奇数个: x + x 3 + x 5 + ⋯ = x 1 − x 2 = x ( 1 − x ) ( 1 + x ) x+x^3+x^5+\cdots=\frac{x}{1-x^2}=\frac{x}{(1-x)(1+x)} x+x3+x5+=1x2x=(1x)(1+x)x
  • 鸡块个数为4的倍数: 1 + x 4 + x 8 + ⋯ = 1 1 − x 4 = 1 ( 1 − x ) ( 1 + x + x 2 + x 3 ) 1+x^4+x^8+\cdots=\frac{1}{1-x^4}=\frac{1}{(1-x)(1+x+x^2+x^3)} 1+x4+x8+=1x41=(1x)(1+x+x2+x3)1
  • 鸡腿最多1个: 1 + x 1+x 1+x
  • 鸡蛋个数为3的倍数: 1 + x 3 + x 6 + ⋯ = 1 1 − x 3 = 1 ( 1 − x ) ( 1 + x + x 2 ) 1+x^3+x^6+\cdots=\frac{1}{1-x^3}=\frac{1}{(1-x)(1+x+x^2)} 1+x3+x6+=1x31=(1x)(1+x+x2)1

( 1 + x ) ( 1 + x + x 2 ) ( 1 + x + x 2 + x 3 ) 1 ( 1 − x ) ( 1 + x ) × x ( 1 − x ) ( 1 + x ) 1 ( 1 − x ) ( 1 + x + x 2 + x 3 ) ( 1 + x ) 1 ( 1 − x ) ( 1 + x + x 2 ) = x ( 1 − x ) 4 = ( 3 0 ) x + ( 4 1 ) x 2 + ( 5 2 ) x 3 + ⋯ + ( n + 2 n − 1 ) x n + ⋯ \begin{aligned} &(1+x)(1+x+x^2)(1+x+x^2+x^3)\frac{1}{(1-x)(1+x)}\times\\ &\frac{x}{(1-x)(1+x)}\frac{1}{(1-x)(1+x+x^2+x^3)}(1+x)\frac{1}{(1-x)(1+x+x^2)}\\ =&\frac{x}{(1-x)^4}\\ =&\binom{3}{0}x+\binom{4}{1}x^2+\binom{5}{2}x^3+\cdots+\binom{n+2}{n-1}x^n+\cdots \end{aligned} ==(1+x)(1+x+x2)(1+x+x2+x3)(1x)(1+x)1×(1x)(1+x)x(1x)(1+x+x2+x3)1(1+x)(1x)(1+x+x2)1(1x)4x(03)x+(14)x2+(25)x3++(n1n+2)xn+

答案为

( n + 2 n − 1 ) = ( n + 2 3 ) = ( n + 2 ) × ( n + 1 ) × n 3 × 2 × 1 = ( n + 2 ) ( n + 1 ) n 6 \binom{n+2}{n-1}=\binom{n+2}{3}=\frac{(n+2)\times(n+1)\times n}{3\times2\times1}=\frac{(n+2)(n+1)n}{6} (n1n+2)=(3n+2)=3×2×1(n+2)×(n+1)×n=6(n+2)(n+1)n

#include <bits/stdc++.h>
using namespace std;

const int MOD = 1e9 + 7;
const int N = 1e5 + 50;

long long n;

long long fpow (long long x, long long p) {
    long long ans = 1;
    for (; p; p >>= 1, x = x * x % MOD)
        if (p & 1) ans = ans * x % MOD;
    return ans;
}

long long solve () {
    n %= MOD;
    return (n + 2) * (n + 1) % MOD * n % MOD;
}

int main () {
    cin >> n;
    cout << solve () * fpow (6, MOD - 2) % MOD << endl;
    return 0;
}

例题2:https://ac.nowcoder.com/acm/contest/24710/B

每一朵花的生成函数:

F i ( x ) = 1 + x + x 2 + ⋯ + x f i = 1 − x f i + 1 1 − x F ( x ) = ∏ i = 1 n F i ( x ) = ∏ i = 1 n 1 − x f i + 1 1 − x = ∏ i = 1 n ( 1 − x f i + 1 ) ( 1 − x ) n F_i(x)=1+x+x^2+\cdots+x^{f_i}=\frac{1-x^{f_i+1}}{1-x}\\ F(x)=\prod_{i=1}^nF_i(x)=\prod_{i=1}^n\frac{1-x^{f_i+1}}{1-x}=\frac{\prod_{i=1}^n(1-x^{f_i+1})}{(1-x)^n}\\ Fi(x)=1+x+x2++xfi=1x1xfi+1F(x)=i=1nFi(x)=i=1n1x1xfi+1=(1x)ni=1n(1xfi+1)

A ( x ) = ∏ i = 1 n ( 1 − x f i + 1 ) B ( x ) = 1 ( 1 − x ) n = ∑ i ≥ 0 ( i + n − 1 i ) x i A(x)=\prod_{i=1}^n(1-x^{f_i+1})\\ B(x)=\frac{1}{(1-x)^n}=\sum_{i\ge 0}\binom{i+n-1}{i}x^i A(x)=i=1n(1xfi+1)B(x)=(1x)n1=i0(ii+n1)xi

那么答案为

∑ i ( s − i + n − 1 s − i ) × [ x i ] A ( x ) = ∑ i ( s − i + n − 1 n − 1 ) × [ x i ] A [ x ] \sum_i\binom{s-i+n-1}{s-i}\times[x^i] A(x)=\sum_i\binom{s-i+n-1}{n-1}\times[x^i]A[x] i(sisi+n1)×[xi]A(x)=i(n1si+n1)×[xi]A[x]

#include <bits/stdc++.h>
using namespace std;

const int N = 2e6 + 50;
const int MOD = 1e9 + 7;

struct node { long long x, y; } a[N];
long long f[25], n, s, cnt, inv[25], fnv[25];

void dfs (int step, long long v, long long c) {
    if (step > n) return void(a[++ cnt] = {v, c});
    dfs (step + 1, v, c);
    dfs (step + 1, -v, c + f[step] + 1);
}

void init () {
    fnv[0] = fnv[1] = inv[0] = inv[1] = 1;
    for (int i = 2; i < n; i ++) {
        inv[i] = (MOD - MOD / i) * inv[MOD % i] % MOD;
        fnv[i] = fnv[i - 1] * inv[i] % MOD;
    }
}

long long calc (long long x) {
    if (x < 0) return 0;
    x %= MOD;
    long long res = 1;
    for (int i = 1; i < n; i ++) 
        res = res * (x + i) % MOD;
    return res * fnv[n - 1] % MOD;
}

int main () {
    cin >> n >> s;
    init ();
    for (int i = 1; i <= n; i ++) cin >> f[i];
    dfs (1, 1, 0);
    long long ans = 0;
    for (int i = 1; i <= cnt; i ++) 
        //cout << a[i].x << ' ' << a[i].y << endl,
        ans = (ans + a[i].x * calc(s - a[i].y)) % MOD;
    cout << (ans + MOD) % MOD << endl;
    return 0;
}

例题3:https://ac.nowcoder.com/acm/contest/24710/C

每一个糖果的生成函数:

F i ( x ) = 1 + x + x 2 + ⋯ + x m i = 1 − x m i + 1 1 − x F ( x ) = ∏ i = 1 n F i ( x ) = ∏ i = 1 n 1 − x m i + 1 1 − x = ∏ i = 1 n ( 1 − x m i + 1 ) ( 1 − x ) n F_i(x)=1+x+x^2+\cdots+x^{m_i}=\frac{1-x^{m_i+1}}{1-x}\\ F(x)=\prod_{i=1}^nF_i(x)=\prod_{i=1}^n\frac{1-x^{m_i+1}}{1-x}=\frac{\prod_{i=1}^n(1-x^{m_i+1})}{(1-x)^n}\\ Fi(x)=1+x+x2++xmi=1x1xmi+1F(x)=i=1nFi(x)=i=1n1x1xmi+1=(1x)ni=1n(1xmi+1)

A ( x ) = ∏ i = 1 n ( 1 − x m i + 1 ) B ( x ) = 1 ( 1 − x ) n = ∑ i ≥ 0 ( i + n − 1 i ) x i A(x)=\prod_{i=1}^n(1-x^{m_i+1})\\ B(x)=\frac{1}{(1-x)^n}=\sum_{i\ge 0}\binom{i+n-1}{i}x^i A(x)=i=1n(1xmi+1)B(x)=(1x)n1=i0(ii+n1)xi

那么答案为

∑ t = a b ∑ i ( t − i + n − 1 t − i ) × [ x i ] A ( x ) = ∑ t = a b ∑ i ( t − i + n − 1 n − 1 ) × [ x i ] A ( x ) = ∑ i [ x i ] A ( x ) × ∑ t = a b ( t − i + n − 1 n − 1 ) = ∑ i [ x i ] A ( x ) × ( ∑ t = a b ( t − i + n − 1 n − 1 ) + ( a − i + n − 1 n ) − ( a − i + n − 1 n ) ) = ∑ i [ x i ] A ( x ) × ( ( b − i + n n ) − ( a − i + n − 1 n ) ) \begin{aligned} &\sum_{t=a}^b\sum_i\binom{t-i+n-1}{t-i}\times[x^i] A(x) \\ =&\sum_{t=a}^b\sum_i\binom{t-i+n-1}{n-1}\times[x^i]A(x)\\ =&\sum_i[x^i]A(x)\times\sum_{t=a}^b\binom{t-i+n-1}{n-1}\\ =&\sum_i[x^i]A(x)\times\Bigg(\sum_{t=a}^b\binom{t-i+n-1}{n-1}+\binom{a-i+n-1}{n}-\binom{a-i+n-1}{n}\Bigg)\\ =&\sum_i[x^i]A(x)\times\Bigg(\binom{b-i+n}{n}-\binom{a-i+n-1}{n}\Bigg) \end{aligned} ====t=abi(titi+n1)×[xi]A(x)t=abi(n1ti+n1)×[xi]A(x)i[xi]A(x)×t=ab(n1ti+n1)i[xi]A(x)×(t=ab(n1ti+n1)+(nai+n1)(nai+n1))i[xi]A(x)×((nbi+n)(nai+n1))

#include <bits/stdc++.h>
using namespace std;

const int N = 1e7 + 50;
const int MOD = 2004;

long long n, a, b;
long long m[11];

long long C (long long x, long long y) {
    if (y < 0 || x < y) return 0;
    long long r = 1, p = MOD, ans = 1;
    for (int i = 1; i <= y; i ++) p *= i, r *= i;
    for (int i = 1; i <= y; i ++) ans = ans * (x - i + 1) % p;
    return ans / r % MOD;
}

int main () {
    cin >> n >> a >> b;
    for (int i = 0; i < n; i ++) cin >> m[i];
    long long ans = 0;
    for (int i = 0; i < 1 << n; i ++) {
        long long v = 1, c = 0;
        for (int j = 0; j < n; j ++) 
            if (i >> j & 1) v *= -1, c += m[j] + 1;
        ans = (ans + v * C(b - c + n, n) - v * C(a - c + n - 1, n)) % MOD;
    }
    cout << (ans + MOD) % MOD << endl;
    return 0;
}

递推关系

例子:斐波那契数列满足 a 0 = 0 a_0=0 a0=0 a 1 = 1 a_1=1 a1=1 a n = a n − 1 + a n − 2 ( n ≥ 2 ) a_n=a_{n-1}+a_{n-2}(n\ge 2) an=an1+an2(n2),求其常生成函数。

A ( x ) = a 0 + a 1 x + a 2 x 2 + ⋯ + a n x n + ⋯ = 0 + x + ( a 1 + a 0 ) x 2 + ( a 2 + a 1 ) x 3 + ⋯ + ( a n − 1 + a n − 2 ) x n + ⋯ = x + ( a 0 x 2 + a 1 x 3 + ⋯ + a n − 2 x n + ⋯   ) + ( a 1 x 2 + a 2 x 3 + ⋯ + a n − 1 x n + ⋯   ) = x + x 2 A ( x ) + x A ( x ) \begin{aligned} A(x)&=a_0+a_1x+a_2x^2+\cdots+a_nx^n+\cdots\\ &=0+x+(a_1+a_0)x^2+(a_2+a_1)x^3+\cdots+(a_{n-1}+a_{n-2})x^n+\cdots\\ &=x+(a_0x^2+a_1x^3+\cdots+a_{n-2}x^n+\cdots)+(a_1x^2+a_2x^3+\cdots+a_{n-1}x^n+\cdots)\\ &=x+x^2A(x)+xA(x) \end{aligned}\\ A(x)=a0+a1x+a2x2++anxn+=0+x+(a1+a0)x2+(a2+a1)x3++(an1+an2)xn+=x+(a0x2+a1x3++an2xn+)+(a1x2+a2x3++an1xn+)=x+x2A(x)+xA(x)

那么

( 1 − x − x 2 ) A ( x ) = x ⇒ A ( x ) = x 1 − x − x 2 ⇒ A ( x ) = 1 5 ( 1 1 − 1 + 5 2 x − 1 1 − 1 − 5 2 x ) ⇒ A ( x ) = ∑ i ≥ 0 1 5 [ ( 1 + 5 2 ) i − ( 1 − 5 2 ) i ] x i ⇒ a n = 1 5 [ ( 1 + 5 2 ) n − ( 1 − 5 2 ) n ] \begin{aligned} &(1-x-x^2)A(x)=x\\ \Rightarrow &A(x)=\frac{x}{1-x-x^2}\\ \Rightarrow &A(x)=\frac{1}{\sqrt{5}}\Bigg(\frac{1}{1-\frac{1+\sqrt{5}}{2}x}-\frac{1}{1-\frac{1-\sqrt{5}}{2}x}\Bigg)\\ \Rightarrow &A(x)=\sum_{i\ge 0}\frac{1}{\sqrt{5}}\Bigg[\bigg(\frac{1+\sqrt{5}}{2}\bigg)^i-\bigg(\frac{1-\sqrt{5}}{2}\bigg)^i\Bigg]x^i\\ \Rightarrow &a_n=\frac{1}{\sqrt{5}}\Bigg[\bigg(\frac{1+\sqrt{5}}{2}\bigg)^n-\bigg(\frac{1-\sqrt{5}}{2}\bigg)^n\Bigg] \end{aligned}\\ (1xx2)A(x)=xA(x)=1xx2xA(x)=5 1(121+5 x11215 x1)A(x)=i05 1[(21+5 )i(215 )i]xian=5 1[(21+5 )n(215 )n]
扩展:假设数列 { a n } \{a_n\} {an} 存在递推关系 a n = c 1 a n − 1 + c 2 a n − 2 + ⋯ + c k a n − k a_n=c_1a_{n-1}+c_2a_{n-2}+\cdots+c_ka_{n-k} an=c1an1+c2an2++ckank,求它对应的常生成函数 A ( x ) = ∑ n ≥ 0 a n x n A(x)=\sum_{n\ge 0}a_nx^n A(x)=n0anxn

Catalan 数

递推公式:
c 0 = 1 , c 1 = 1 c n = c 0 c n − 1 + c 1 c n − 2 + ⋯ + c n − 1 c 0 = ∑ i = 0 n − 1 c i c n − i − 1 c_0=1,c_1=1\\ c_n=c_0c_{n-1}+c_1c_{n-2}+\cdots+c_{n-1}c_0=\sum_{i=0}^{n-1}c_ic_{n-i-1} c0=1c1=1cn=c0cn1+c1cn2++cn1c0=i=0n1cicni1
那么
C ( x ) = ∑ n ≥ 0 c n x n = 1 + x + ∑ n ≥ 2 ∑ i = 0 n − 1 c i c n − i − 1 x n = 1 + x + ∑ n ≥ 1 ∑ i = 0 n c i c n − i x n + 1 = 1 + x + x ( ∑ n ≥ 0 ∑ i = 0 n c i c n − i x n − c 0 c 0 ) = 1 + x + x ( C 2 ( x ) − 1 ) \begin{aligned} C(x)&=\sum_{n\ge 0}c_nx^n\\ &=1+x+\sum_{n\ge 2}\sum_{i=0}^{n-1}c_ic_{n-i-1}x^n\\ &=1+x+\sum_{n\ge 1}\sum_{i=0}^nc_ic_{n-i}x^n+1\\ &=1+x+x\Big(\sum_{n\ge 0}\sum_{i=0}^nc_ic_{n-i}x^n-c_0c_0\Big)\\ &=1+x+x\big(C^2(x)-1\big) \end{aligned}\\ C(x)=n0cnxn=1+x+n2i=0n1cicni1xn=1+x+n1i=0ncicnixn+1=1+x+x(n0i=0ncicnixnc0c0)=1+x+x(C2(x)1)
解出 C ( x ) C(x) C(x) 的表达式
C ( x ) = 1 ± 1 − 4 x 2 x ⇒ C ( x ) = 1 − 1 − 4 x 2 x \begin{aligned} &C(x)=\frac{1\pm\sqrt{1-4x}}{2x}\\ \Rightarrow &C(x)=\frac{1-\sqrt{1-4x}}{2x} \end{aligned}\\ C(x)=2x1±14x C(x)=2x114x
由于
( b + a x ) k = ∑ n ≥ 0 ( k n ) b k − n a n x n , k ∈ R (b+ax)^k=\sum_{n\ge 0}\binom{k}{n}b^{k-n}a^nx^n,k\in\R (b+ax)k=n0(nk)bknanxnkR

C ( x ) = 1 2 x ( 1 − ∑ n ≥ 0 ( 1 2 n ) ( − 4 ) n x n ) = − 1 2 ∑ n ≥ 1 ( 1 2 n ) ( − 4 ) n x n − 1 = ∑ n ≥ 0 − 1 2 ( 1 2 n + 1 ) ( − 4 ) n + 1 x n \begin{aligned} C(x) &= \frac{1}{2x}\bigg(1-\sum_{n\ge 0}\binom{\frac{1}{2}}{n}(-4)^nx^n\bigg)\\ &= -\frac{1}{2}\sum_{n\ge 1}\binom{\frac{1}{2}}{n}(-4)^nx^{n-1}\\ &= \sum_{n\ge 0}-\frac{1}{2}\binom{\frac{1}{2}}{n+1}(-4)^{n+1}x^n\\ \end{aligned}\\ C(x)=2x1(1n0(n21)(4)nxn)=21n1(n21)(4)nxn1=n021(n+121)(4)n+1xn
通项 c n c_n cn
c n = − 1 2 ( 1 2 n + 1 ) ( − 4 ) n + 1 = − 1 2 1 2 ( 1 2 − 1 ) ( 1 2 − 2 ) ⋯ ( 1 2 − n ) ( n + 1 ) ! ( − 4 ) n + 1 = 1 2 1 2 ( 1 − 1 2 ) ( 2 − 1 2 ) ⋯ ( n − 1 2 ) ( n + 1 ) ! 4 n + 1 = 1 × 3 × 5 × ⋯ × ( 2 n − 1 ) ( n + 1 ) ! 2 n = 1 × 2 × 3 × ⋯ × ( 2 n − 1 ) × ( 2 n ) ( n + 1 ) ! × n ! = 1 n + 1 ( 2 n n ) \begin{aligned} c_n &= -\frac{1}{2}\binom{\frac{1}{2}}{n+1}(-4)^{n+1}\\ &=-\frac{1}{2}\frac{\frac{1}{2}(\frac{1}{2}-1)(\frac{1}{2}-2)\cdots(\frac{1}{2}-n)}{(n+1)!}(-4)^{n+1}\\ &=\frac{1}{2}\frac{\frac{1}{2}(1-\frac{1}{2})(2-\frac{1}{2})\cdots(n-\frac{1}{2})}{(n+1)!}4^{n+1}\\ &=\frac{1\times 3\times 5\times \cdots \times (2n-1)}{(n+1)!}2^n\\ &=\frac{1\times 2\times 3\times \cdots \times (2n-1)\times(2n)}{(n+1)!\times n!}\\ &=\frac{1}{n+1}\binom{2n}{n} \end{aligned}\\ cn=21(n+121)(4)n+1=21(n+1)!21(211)(212)(21n)(4)n+1=21(n+1)!21(121)(221)(n21)4n+1=(n+1)!1×3×5××(2n1)2n=(n+1)!×n!1×2×3××(2n1)×(2n)=n+11(n2n)

指数生成函数

一个数列 { a n } \{a_n\} {an} 对应的指数生成函数为 A ( x ) = ∑ n ≥ 0 a n x n n ! A(x)=\sum_{n\ge 0}a_n\frac{x^n}{n!} A(x)=n0ann!xn

例如,数列 a n = 1 a_n=1 an=1 ,其指数生成函数为:
A ( x ) = 1 + x + x 2 2 ! + x 3 3 ! + ⋯ + x n n ! + ⋯ = e x = e x p ( x ) A(x)=1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+\cdots+\frac{x^n}{n!}+\cdots=e^x=exp(x) A(x)=1+x+2!x2+3!x3++n!xn+=ex=exp(x)
例子:

  • 有两种物体,其中取 i i i 个第 1 种物体的方案数为 a i a_i ai ,取 j j j 个第 2 种物体的方案数为 b j b_j bj ,求取 k k k 个物体并排成一列的方案数。

c k = ∑ i = 0 k ( k i ) a i b k − i = ∑ i = 0 k k ! i ! × ( k − i ) ! a i b k − i ⇒ c k k ! = ∑ i = 0 k a i i ! × b k − i ( k − i ) ! 。 c_k=\sum_{i=0}^k\binom{k}{i}a_ib_{k-i}=\sum_{i=0}^k\frac{k!}{i!\times (k-i)!}a_ib_{k-i}\\ \Rightarrow \frac{c_k}{k!}=\sum_{i=0}^k\frac{a_i}{i!}\times\frac{b_{k-i}}{(k-i)!}。 ck=i=0k(ik)aibki=i=0ki!×(ki)!k!aibkik!ck=i=0ki!ai×(ki)!bki
A ( x ) A(x) A(x) B ( x ) B(x) B(x) 分别为
A ( x ) = a 0 + a 1 x 1 ! + a 2 x 2 ! + ⋯ + a n x n ! + ⋯ A(x)=a_0+a_1\frac{x}{1!}+a_2\frac{x}{2!}+\cdots+a_n\frac{x}{n!}+\cdots \\ A(x)=a0+a11!x+a22!x++ann!x+
B ( x ) = b 0 + b 1 x 1 ! + b 2 x 2 ! + ⋯ + b n x n ! + ⋯ B(x)=b_0+b_1\frac{x}{1!}+b_2\frac{x}{2!}+\cdots+b_n\frac{x}{n!}+\cdots \\ B(x)=b0+b11!x+b22!x++bnn!x+
C ( x ) = ∑ k ≥ 0 c k x k k ! = ∑ k ≥ 0 ∑ i = 0 k a i i ! b k − i ( k − i ) ! x k = A ( x ) × B ( x ) C(x)=\sum_{k\ge 0}c_k\frac{x^k}{k!}=\sum_{k\ge 0}\sum_{i=0}^k\frac{a_i}{i!}\frac{b_{k-i}}{(k-i)!}x^k=A(x)\times B(x) C(x)=k0ckk!xk=k0i=0ki!ai(ki)!bkixk=A(x)×B(x)

答案为 [ x k ] C ( x ) × k ! [x^k]C(x)\times k! [xk]C(x)×k!

  • 用数字 1,2,3,4 作 6 位数字,每个数字在 6 位数中出现的次数不得大于2,求可以作出多少个不同的 6 位数。

每一个数字的生成函数为
F ( x ) = 1 + x + x 2 2 ! G ( x ) = F 4 ( x ) F(x)=1+x+\frac{x^2}{2!}\\ G(x)=F^4(x) F(x)=1+x+2!x2G(x)=F4(x)

答案为 [ x 6 ] G ( x ) × 6 ! [x^6]G(x)\times 6! [x6]G(x)×6!

定理:设 S = { a 1 , a 2 , … , a k } S=\{a_1, a_2, \dots ,a_k\} S={a1,a2,,ak},且 a i a_i ai 可以取的次数的集合为 M i M_i Mi ,记 F i ( x ) = ∑ u ∈ M i x u u ! F_i(x)=\sum_{u\in M_i}\frac{x^u}{u!} Fi(x)=uMiu!xu,则从 S S S 中取 n n n 个元素排成一列的方案数 g ( n ) g(n) g(n) 的常生成函数 G ( x ) = ∑ i ≥ 0 g ( i ) x i i ! G(x)=\sum_{i\ge 0}g(i)\frac{x^i}{i!} G(x)=i0g(i)i!xi,满足:
G ( x ) = F 1 ( x ) F 2 ( x ) ⋯ F k ( x ) G(x)=F_1(x)F_2(x)\cdots F_k(x) G(x)=F1(x)F2(x)Fk(x)

公式(定义):
e x p ( x ) = 1 + x + x 2 2 ! + ⋯ = ∑ n ≥ 0 x n n ! e x p ( a x ) = 1 + a x + a 2 x 2 2 ! + ⋯ = ∑ n ≥ 0 a n x n n ! e x p ( f ( x ) ) = 1 + f ( x ) + f 2 ( x ) 2 ! + ⋯ = ∑ n ≥ 0 f n ( x ) n ! exp(x)=1+x+\frac{x^2}{2!}+\cdots=\sum_{n\ge 0}\frac{x^n}{n!}\\ exp(ax)=1+ax+a^2\frac{x^2}{2!}+\cdots=\sum_{n\ge 0}a^n\frac{x^n}{n!}\\ exp(f(x))=1+f(x)+\frac{f^2(x)}{2!}+\cdots=\sum_{n\ge 0}\frac{f^n(x)}{n!}\\ exp(x)=1+x+2!x2+=n0n!xnexp(ax)=1+ax+a22!x2+=n0ann!xnexp(f(x))=1+f(x)+2!f2(x)+=n0n!fn(x)

例题4:https://ac.nowcoder.com/acm/contest/24710/D

定义 F ( x ) , G ( x ) F(x),G(x) F(x)G(x)
F ( x ) = 1 + x 2 2 ! + x 4 4 ! + ⋯ = e x p ( x ) + e x p ( − x ) 2 G ( x ) = 1 + x + x 2 2 ! + ⋯ = ∑ n ≥ 0 x n n ! = e x p ( x ) F(x)=1+\frac{x^2}{2!}+\frac{x^4}{4!}+\cdots=\frac{exp(x)+exp(-x)}{2}\\ G(x)=1+x+\frac{x^2}{2!}+\cdots=\sum_{n\ge 0}\frac{x^n}{n!}=exp(x) F(x)=1+2!x2+4!x4+=2exp(x)+exp(x)G(x)=1+x+2!x2+=n0n!xn=exp(x)
则方案数的生成函数 H ( x ) H(x) H(x) 为:
H ( x ) = F 2 ( x ) G 2 ( x ) = ( e x p ( x ) + e x p ( − x ) 2 ) 2 e x p ( x ) 2 = e x p ( x ) 2 + 2 + e x p ( − x ) 2 4 e x p ( 2 x ) = e x p ( 4 x ) + 2 e x p ( 2 x ) + 1 4 = ∑ n ≥ 0 1 4 ( 4 n + 2 ⋅ 2 n ) x n n ! + 1 4 \begin{aligned} H(x)&=F^2(x)G^2(x)\\ &=(\frac{exp(x)+exp(-x)}{2})^2exp(x)^2\\ &=\frac{exp(x)^2+2+exp(-x)^2}{4}exp(2x)\\ &=\frac{exp(4x)+2exp(2x)+1}{4}\\ &=\sum_{n\ge 0}\frac{1}{4}(4^n+2\cdot 2^n)\frac{x^n}{n!}+\frac{1}{4} \end{aligned}\\ H(x)=F2(x)G2(x)=(2exp(x)+exp(x))2exp(x)2=4exp(x)2+2+exp(x)2exp(2x)=4exp(4x)+2exp(2x)+1=n041(4n+22n)n!xn+41
答案为
4 n − 1 + 2 n − 1 m o d    10007 4^{n-1}+2^{n-1} \mod 10007 4n1+2n1mod10007

#include <bits/stdc++.h>
#define endl '\n'
using namespace std;

const int MOD = 10007;

int T, n;

int fpow (int x, int p) {
    int ans = 1;
    for (; p ; p >>= 1, x = (long long)x * x % MOD)
        if (p & 1) ans = (long long)ans * x % MOD;
    return ans;
}

int main () {
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    cin >> T;
    while (T --) {
        cin >> n;
        cout << (fpow (4, n - 1) + fpow(2, n - 1)) % MOD << endl; 
    }
    return 0;
}

例题5:https://ac.nowcoder.com/acm/contest/24710/E

每一次操作的贡献为:
r e s u l t + = a 1 a 2 ⋯ a x ⋯ a n − a 1 a 2 ⋯ ( a x − 1 ) ⋯ a n result+=a_1a_2\cdots a_x\cdots a_n-a_1a_2\cdots (a_x-1)\cdots a_n result+=a1a2axana1a2(ax1)an
由于中间状态都会消去,总的贡献为:
r e s u l t = a 1 a 2 ⋯ a n − ( a 1 − x 1 ) ( a 2 − x 2 ) ⋯ ( a n − x n ) result = a_1a_2\cdots a_n-(a_1-x_1)(a_2-x_2)\cdots (a_n-x_n) result=a1a2an(a1x1)(a2x2)(anxn)
∑ i = 0 n x i = k , x i ≥ 0 \sum_{i=0}^nx_i=k,x_i\ge 0 i=0nxi=kxi0
问题变为求 ( a 1 − x 1 ) ( a 2 − x 2 ) ⋯ ( a n − x n ) (a_1-x_1)(a_2-x_2)\cdots (a_n-x_n) (a1x1)(a2x2)(anxn) 的期望:
E [ ( a 1 − x 1 ) ( a 2 − x 2 ) ⋯ ( a n − x n ) ] = ∑ x 1 + x 2 + ⋯ + x n = k ( a 1 − x 1 ) ( a 2 − x 2 ) ⋯ ( a n − x n ) × ( k x 1 , x 2 , ⋯   , x n ) n k = ∑ x 1 + x 2 + ⋯ + x n = k ( a 1 − x 1 ) x 1 ! ( a 2 − x 2 ) x 2 ! ⋯ ( a n − x n ) x n ! × k ! n k = k ! n k ∑ x 1 + x 2 + ⋯ + x n = k ( a 1 − x 1 ) x 1 ! ( a 2 − x 2 ) x 2 ! ⋯ ( a n − x n ) x n ! \begin{aligned} &\mathbb{E}\big[(a_1-x_1)(a_2-x_2)\cdots (a_n-x_n)\big]\\ =&\frac{\displaystyle\sum_{x_1+x_2+\cdots+x_n=k}(a_1-x_1)(a_2-x_2)\cdots (a_n-x_n)\times\binom{k}{x_1,x_2,\cdots,x_n}}{n^k}\\ =&\frac{\displaystyle\sum_{x_1+x_2+\cdots+x_n=k}\frac{(a_1-x_1)}{x_1!}\frac{(a_2-x_2)}{x_2!}\cdots \frac{(a_n-x_n)}{x_n!}\times k!}{n^k}\\ =&\frac{k!}{n^k}\displaystyle\sum_{x_1+x_2+\cdots+x_n=k}\frac{(a_1-x_1)}{x_1!}\frac{(a_2-x_2)}{x_2!}\cdots \frac{(a_n-x_n)}{x_n!} \end{aligned} ===E[(a1x1)(a2x2)(anxn)]nkx1+x2++xn=k(a1x1)(a2x2)(anxn)×(x1,x2,,xnk)nkx1+x2++xn=kx1!(a1x1)x2!(a2x2)xn!(anxn)×k!nkk!x1+x2++xn=kx1!(a1x1)x2!(a2x2)xn!(anxn)
构造每一个 a i a_i ai 对应的生成函数
F i ( x ) = ∑ j ≥ 0 ( a i − j ) j ! x j = ∑ j ≥ 0 a i j ! x j − ∑ j ≥ 0 j j ! x j = ∑ j ≥ 0 a i j ! x j − x ∑ j ≥ 0 1 j ! x j = a i e x p ( x ) − x e x p ( x ) \begin{aligned} F_i(x)&=\sum_{j\ge 0} \frac{(a_i-j)}{j!}x^j\\ &=\sum_{j\ge 0}\frac{a_i}{j!}x^j-\sum_{j\ge 0}\frac{j}{j!}x^j\\ &=\sum_{j\ge 0}\frac{a_i}{j!}x^j-x\sum_{j\ge 0}\frac{1}{j!}x^j\\ &=a_iexp(x)-xexp(x) \end{aligned} Fi(x)=j0j!(aij)xj=j0j!aixjj0j!jxj=j0j!aixjxj0j!1xj=aiexp(x)xexp(x)
F ( x ) F(x) F(x)
F ( x ) = ∏ i = 1 n F i ( x ) = ∑ k ≥ 0 ∑ x 1 + x 2 + ⋯ + x n = k ( a 1 − x 1 ) x 1 ! ( a 2 − x 2 ) x 2 ! ⋯ ( a n − x n ) x n ! x k = e x p ( n x ) × ∏ i = 1 n ( a i − x )            ( 记 A ( x ) = ∏ i = 1 n ( a i − x ) ) = ∑ i ≥ 0 n i x i i ! × A ( x ) = ∑ k ≥ 0 ∑ i = 0 k [ x i ] A ( x ) × n k − i ( k − i ) ! x k \begin{aligned} F(x)&=\prod_{i=1}^n F_i(x)\\ &=\sum_{k\ge 0}\sum_{x_1+x_2+\cdots+x_n=k}\frac{(a_1-x_1)}{x_1!}\frac{(a_2-x_2)}{x_2!}\cdots \frac{(a_n-x_n)}{x_n!}x^k\\ &=exp(nx)\times\prod_{i=1}^n(a_i-x)\ \ \ \ \ \ \ \ \ \ \Big(记A(x)=\prod_{i=1}^n(a_i-x)\Big)\\ &=\sum_{i\ge 0} n^i\frac{x^i}{i!} \times A(x)\\ &=\sum_{k\ge 0}\sum_{i=0}^k[x^i]A(x)\times\frac{n^{k-i}}{(k-i)!}x^k \end{aligned} F(x)=i=1nFi(x)=k0x1+x2++xn=kx1!(a1x1)x2!(a2x2)xn!(anxn)xk=exp(nx)×i=1n(aix)          (A(x)=i=1n(aix))=i0nii!xi×A(x)=k0i=0k[xi]A(x)×(ki)!nkixk
那么答案 [ x k ] F ( x ) [x^k]F(x) [xk]F(x) 为:
∑ i = 0 n [ x i ] A ( x ) × n k − i ( k − i ) ! x k \sum_{i=0}^n[x^i]A(x)\times\frac{n^{k-i}}{(k-i)!}x^k i=0n[xi]A(x)×(ki)!nkixk

#include <bits/stdc++.h>
using namespace std;

const int MOD = 1e9 + 7;
const int N = 5050;

int n, k, a[N], f[N], g[N];
int b1[N], b2[N], c[N];

int fpow (int x, int p) {
    int res = 1;
    for (; p; p >>= 1, x = (long long) x * x % MOD)
        if (p & 1) res = (long long)res * x % MOD;
    return res;
}

void mul(int* b1, int* b2) {
    memset (c, 0, sizeof (c));
    for (int i = 0; i < 2; i ++) 
        for (int j = 0; j <= n; j ++) 
            c[i + j] = (c[i + j] + (long long)b1[j] * b2[i] % MOD) % MOD;
    for (int i = 0; i <= n; i ++) 
        b1[i] = c[i];
}

int main () {
    cin >> n >> k;
    for (int i = 1; i <= n; i ++) cin >> a[i];
    g[0] = f[0] = 1, g[1] = fpow (n, MOD - 2);
    for (int i = 1; i <= n; i ++) 
        f[i] = (long long)(k - i + 1) * f[i - 1] % MOD;
    for (int i = 2; i <= n; i ++) 
        g[i] = (long long)g[i - 1] * g[1] % MOD;
    b1[0] = a[1], b1[1] = -1;
    for (int i = 2; i <= n; i ++) {
        b2[0] = a[i], b2[1] = -1;
        mul (b1, b2);
    }
    int ans = 0, sum = 1;
    for (int i = 0; i <= n; i ++) 
        ans = (ans + (long long)b1[i] * f[i] % MOD * g[i] % MOD) % MOD;
    for (int i = 1; i <= n; i ++)
        sum = (long long) sum * a[i] % MOD;
    cout << ((long long)sum - ans + MOD) % MOD << endl;
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值