传送门
生成函数入门题。
按照题意构造函数:
对于限定必须是出现偶数次的颜色:
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+e−x
对于无限定的颜色:
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+e−x)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;
}