指数型母函数(Counting Sequences II)

泰勒展开

公式:
在这里插入图片描述

常见的公式:

e x = 1 + x + x 2 2 ! + x 3 3 ! + . . . e^{x}=1+x+\dfrac{x^2}{2!}+\dfrac{x^3}{3!}+... ex=1+x+2!x2+3!x3+...

e − x = 1 − x + x 2 2 ! − x 3 3 ! + . . . e^{-x}=1-x+\dfrac{x^2}{2!}-\dfrac{x^3}{3!}+... ex=1x+2!x23!x3+...

e k x = 1 + k x + k 2 x 2 2 ! + k 3 x 3 3 ! + . . . e^{kx}=1+kx+\dfrac{k^2x^2}{2!}+\dfrac{k^3x^3}{3!}+... ekx=1+kx+2!k2x2+3!k3x3+...

e x + e − x 2 = 1 + x 2 2 ! + x 4 4 ! + x 6 6 ! . . . \dfrac{e^{x}+e^{-x}}{2}=1+\dfrac{x^2}{2!}+\dfrac{x^4}{4!}+\dfrac{x^6}{6!}... 2ex+ex=1+2!x2+4!x4+6!x6...

e x − e − x 2 = x + x 3 3 ! + x 5 5 ! + x 7 7 ! . . . \dfrac{e^{x}-e^{-x}}{2}=x+\dfrac{x^3}{3!}+\dfrac{x^5}{5!}+\dfrac{x^7}{7!}... 2exex=x+3!x3+5!x5+7!x7...
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


指数型母函数

普通的母函数解决的问题是组合问题,例如可以选择 [ 0 , x 1 ] [0,x_1] [0,x1] A A A [ 0 , x 2 ] [0,x_2] [0,x2] B B B,求选择共 n n n个的方案为式子 ( 1 + x + x 2 + . . . x x 1 ) ( 1 + x 1 + x 2 + . . . x x 1 ) (1+x+x^2+...x^{x_1})(1+x^{1}+x^{2}+...x^{x_1}) (1+x+x2+...xx1)(1+x1+x2+...xx1)展开后 x n x^n xn的系数。但是这样只能求出组合的方案数,而对于组合并排列就束手无策了。

比方说,题目求的是选择 [ 0 , x 1 ] [0,x_1] [0,x1] A A A [ 0 , x 2 ] [0,x_2] [0,x2] B B B,并排列的方案数。

我们这样构造生成函数:
( 1 + x + x 2 2 ! + x 3 3 ! + . . . + x x 1 x 1 ! ) ( 1 + x + x 2 2 ! + x 3 3 ! + . . . + x x 2 x 2 ! ) (1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+...+\frac{x^{x_1}}{x_1!})(1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+...+\frac{x^{x_2}}{x_2!}) (1+x+2!x2+3!x3+...+x1!xx1)(1+x+2!x2+3!x3+...+x2!xx2)

那么展开式中 x n n ! \dfrac{x^n}{n!} n!xn的系数就是答案。


如果有限项时,逆元加上 F F T FFT FFT或者直接 d o u b l e double double暴力。考虑无限项时的情况。(当所有数的取值范围大于最大可行取值时,可以视为无限项)

我们可以先将两个式子逆泰勒展开,乘完后再泰勒展开。例如当上述 x 1 → ∞ , x 2 → ∞ x_1\to\infty,x_2\to\infty x1,x2时,有:

( 1 + x + x 2 2 ! + x 3 3 ! + . . . ) ( 1 + x + x 2 2 ! + x 3 3 ! + . . . ) = e x ∗ e x (1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+...)(1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+...)=e^x*e^x (1+x+2!x2+3!x3+...)(1+x+2!x2+3!x3+...)=exex

e 2 x = 1 + 2 x + 2 2 x 2 2 ! + 2 3 x 3 3 ! + . . . e^{2x}=1+2x+\dfrac{2^2x^2}{2!}+\dfrac{2^3x^3}{3!}+... e2x=1+2x+2!22x2+3!23x3+...
其中 x n n ! \dfrac{x^n}{n!} n!xn的系数为: 2 n 2^n 2n,所以方案数为 2 n 2^n 2n


例题:Counting Sequences II

题意:

构造一个序列 a [ 1 , n ] a_{[1,n]} a[1,n],满足 a i ∈ [ 1 , m ] a_i\in[1,m] ai[1,m],其中偶数出现的次数为偶数次。

解析:

假设 2 ∣ m 2|m 2m m 2 \dfrac{m}{2} 2m个偶数,有 m 2 \dfrac{m}{2} 2m个奇数。

构造出母函数:
( 1 + x 2 2 ! + x 4 4 ! + x 6 6 ! . . . ) m 2 ( 1 + x + x 2 2 ! + x 3 3 ! + . . . ) m 2 (1+\dfrac{x^2}{2!}+\dfrac{x^4}{4!}+\dfrac{x^6}{6!}...)^{\frac{m}{2}}(1+x+\dfrac{x^2}{2!}+\dfrac{x^3}{3!}+...)^{\frac{m}{2}} (1+2!x2+4!x4+6!x6...)2m(1+x+2!x2+3!x3+...)2m

→ ( e x + e − x 2 ) m 2 ( e x ) m 2 \to(\dfrac{e^{x}+e^{-x}}{2})^{\frac{m}{2}}(e^x)^{\frac{m}{2}} (2ex+ex)2m(ex)2m

→ ( e 2 x + 1 ) m 2 ( 1 2 ) m 2 \to(e^{2x}+1)^{\frac{m}{2}}(\frac{1}{2})^{\frac{m}{2}} (e2x+1)2m(21)2m

→ ( 1 + m 2 1 ! e 2 x + m 2 ( m 2 − 1 ) 2 ! e 4 x + m 2 ( m 2 − 1 ) ( m 2 − 2 ) 3 ! e 6 x + . . . ) ( 1 2 ) m 2 \to(1+\frac{\frac{m}{2}}{1!}e^{2x}+\frac{\frac{m}{2}(\frac{m}{2}-1)}{2!}e^{4x}+\frac{\frac{m}{2}(\frac{m}{2}-1)(\frac{m}{2}-2)}{3!}e^{6x}+...)(\frac{1}{2})^{\frac{m}{2}} (1+1!2me2x+2!2m(2m1)e4x+3!2m(2m1)(2m2)e6x+...)(21)2m

e k x e^{kx} ekx x n n ! \dfrac{x^n}{n!} n!xn的系数为 k n k^n kn,所以整个式子中 x n n ! \dfrac{x^n}{n!} n!xn的系数为:
( m 2 1 ! ∗ 2 n + m 2 ( m 2 − 1 ) 2 ! ∗ 4 n + m 2 ( m 2 − 1 ) ( m 2 − 2 ) 3 ! ∗ 6 n + . . . ) ( 1 2 ) m 2 (\frac{\frac{m}{2}}{1!}*2^n+\frac{\frac{m}{2}(\frac{m}{2}-1)}{2!}*4^n+\frac{\frac{m}{2}(\frac{m}{2}-1)(\frac{m}{2}-2)}{3!}*6^n+...)(\frac{1}{2})^{\frac{m}{2}} (1!2m2n+2!2m(2m1)4n+3!2m(2m1)(2m2)6n+...)(21)2m

如果 2 ∣ ̸ m 2|\not m 2̸m,相当于多一个奇数,也就是 e x e^x ex,那么式子变为:
→ ( e x + m 2 1 ! e 3 x + m 2 ( m 2 − 1 ) 2 ! e 5 x + m 2 ( m 2 − 1 ) ( m 2 − 2 ) 3 ! e 7 x + . . . ) ( 1 2 ) m 2 \to(e^x+\frac{\frac{m}{2}}{1!}e^{3x}+\frac{\frac{m}{2}(\frac{m}{2}-1)}{2!}e^{5x}+\frac{\frac{m}{2}(\frac{m}{2}-1)(\frac{m}{2}-2)}{3!}e^{7x}+...)(\frac{1}{2})^{\frac{m}{2}} (ex+1!2me3x+2!2m(2m1)e5x+3!2m(2m1)(2m2)e7x+...)(21)2m

答案为:
( 1 + m 2 1 ! ∗ 3 n + m 2 ( m 2 − 1 ) 2 ! ∗ 5 n + m 2 ( m 2 − 1 ) ( m 2 − 2 ) 3 ! ∗ 7 n + . . . ) ( 1 2 ) m 2 (1+\frac{\frac{m}{2}}{1!}*3^n+\frac{\frac{m}{2}(\frac{m}{2}-1)}{2!}*5^n+\frac{\frac{m}{2}(\frac{m}{2}-1)(\frac{m}{2}-2)}{3!}*7^n+...)(\frac{1}{2})^{\frac{m}{2}} (1+1!2m3n+2!2m(2m1)5n+3!2m(2m1)(2m2)7n+...)(21)2m

代码:

/*
 *  Author : Jk_Chen
 *    Date : 2019-09-15-12.22.19
 */
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define rep(i,a,b) for(int i=(int)(a);i<=(int)(b);i++)
#define per(i,a,b) for(int i=(int)(a);i>=(int)(b);i--)
#define mmm(a,b) memset(a,b,sizeof(a))
#define pb push_back
#define pill pair<int, int>
#define fi first
#define se second
#define debug(x) cerr<<#x<<" = "<<x<<'\n';
const LL mod=1e9+7;
const int maxn=4e5+9;
LL rd(){ LL ans=0; char last=' ',ch=getchar();
    while(!(ch>='0' && ch<='9'))last=ch,ch=getchar();
    while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();
    if(last=='-')ans=-ans; return ans;
}
/*_________________________________________________________begin*/

LL fac[maxn];
LL ifac[maxn];
LL C(int i,int j){return fac[i]*ifac[j]%mod*ifac[i-j]%mod; }

LL Pow(LL a,LL b,LL mod){
    LL res=1;
    while(b>0){
        if(b&1)res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res;
}
/*_________________________________________________________Pow*/

const LL inv2=Pow(2,mod-2,mod);

LL deal(LL n,LL m){
    LL res=0;
    LL st=2;
    if(m%2){
        res=1;
        st=3;
    }
    LL mul=1;
    for(int i=m/2,j=1;i>=1;i--,j++){
        mul=mul*i%mod;
        res=(res+mul*Pow(st,n,mod)%mod*ifac[j]%mod)%mod;
        st+=2;
    }
    return res*Pow(inv2,m/2,mod)%mod;
}

int q[maxn];
int main(){
    fac[0]=1;
    rep(i,1,maxn-1)fac[i]=fac[i-1]*i%mod;
    ifac[maxn-1]=Pow(fac[maxn-1],mod-2,mod);
    per(i,maxn-2,0){
        ifac[i]=ifac[i+1]*(i+1)%mod;
    }

    int t=rd();
    while(t--){
        LL n,m;
        cin>>n>>m;
        printf("%lld\n",deal(n,m));
    }


    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值