传送门
生成函数入门题。
按照题意构造函数:
对于限定必须是出现偶数次的颜色:1+x22!+x44!+...=ex+e−x21+\frac {x^2}{2!}+\frac {x^4}{4!}+...=\frac{e^x+e^{-x}}21+2!x2+4!x4+...=2ex+e−x
对于无限定的颜色:1+x1!+x22!+...=ex1+\frac x{1!}+\frac{x^2}{2!}+...=e^x1+1!x+2!x2+...=ex
因此最终的生成函数SET(x)=e2x∗(ex+e−x2)2=e4x+2e2x+14SET(x)=e^{2x}*(\frac{e^x+e^{-x}}2)^2=\frac{e^{4x}+2e^{2x}+1}4SET(x)=e2x∗(2ex+e−x)2=4e4x+2e2x+1
而我们要求的就是xix^ixi的系数。
根据泰勒展开式:
ekxe^{kx}ekx的展开式中xnx^nxn对应的系数是knk!\frac{k^n}{k!}k!kn
因此出现的方案数为4n+2n+14n!\frac{4^n+2^{n+1}}{4n!}4n!4n+2n+1
由于每种方案有n!n!n!种排列方式,因此最终答案就是4n+2n+14\frac{4^n+2^{n+1}}444n+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;
}