poj3734 Blocks(生成函数)

27 篇文章 0 订阅
27 篇文章 1 订阅

传送门
生成函数入门题。


按照题意构造函数:
对于限定必须是出现偶数次的颜色: 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;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值