poj3734 Blocks(生成函数)

本文深入探讨了生成函数在组合数学中的应用,特别是在解决颜色球排列组合问题上的具体实现。通过构建特定的生成函数,文章详细解析了如何计算在特定条件下不同颜色球的排列方案数量,并提供了高效的算法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

传送门
生成函数入门题。


按照题意构造函数:
对于限定必须是出现偶数次的颜色: 1 + x 2 2 ! + x 4 4 ! + . . . = e x + e − x 2 1+\frac {x^2}{2!}+\frac {x^4}{4!}+...=\frac{e^x+e^{-x}}2 1+2!x2+4!x4+...=2ex+ex
对于无限定的颜色: 1 + x 1 ! + x 2 2 ! + . . . = e x 1+\frac x{1!}+\frac{x^2}{2!}+...=e^x 1+1!x+2!x2+...=ex
因此最终的生成函数 S E T ( x ) = e 2 x ∗ ( e x + e − x 2 ) 2 = e 4 x + 2 e 2 x + 1 4 SET(x)=e^{2x}*(\frac{e^x+e^{-x}}2)^2=\frac{e^{4x}+2e^{2x}+1}4 SET(x)=e2x(2ex+ex)2=4e4x+2e2x+1
而我们要求的就是 x i x^i xi的系数。
根据泰勒展开式:
e k x e^{kx} ekx的展开式中 x n x^n xn对应的系数是 k n k ! \frac{k^n}{k!} k!kn
因此出现的方案数为 4 n + 2 n + 1 4 n ! \frac{4^n+2^{n+1}}{4n!} 4n!4n+2n+1
由于每种方案有 n ! n! n!种排列方式,因此最终答案就是 4 n + 2 n + 1 4 \frac{4^n+2^{n+1}}4 44n+2n+1
代码:

#include<iostream>
#include<cstdio>
using namespace std;
const int mod=10007;
int T,n;
inline int ksm(int a,int p){int ret=1;for(;p;p>>=1,a=a*a%mod)if(p&1)ret=ret*a%mod;return ret;}
int main(){
	scanf("%d",&T);
	while(T--)scanf("%d",&n),cout<<((ksm(2,n+1)+ksm(4,n))%mod)*2502%mod<<'\n';
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值