Description:
一列nn块地砖,可以染成红黄蓝绿四种颜色之一,并且要求黄绿数量为偶数,问方案数。
Solution:
排列问题并且每种元素内部没有顺序,利用指数型生成函数解决。
分别设四种颜色的生成函数为A,B,C,D
B(x)=D(x)=∑∞i=1x2i(2i)!B(x)=D(x)=∑i=1∞x2i(2i)!
根据泰勒展开
∑∞i=1xii!=ex∑i=1∞xii!=ex
∑∞i=1x−ii!=e−x∑i=1∞x−ii!=e−x
得出
A(x)=C(x)=exA(x)=C(x)=ex
B(x)=D(x)=ex+e−x2B(x)=D(x)=ex+e−x2
所以方案数即为
A(x)B(x)C(x)D(x)=e4x+2e2x+14A(x)B(x)C(x)D(x)=e4x+2e2x+14
常数项忽略不计
因为
ekx的第n项系数为knk!ekx的第n项系数为knk!
所以带回得出
=4n+2∗2n4n!=4n+2∗2n4n!
乘上阶乘得出答案为
4n+2∗2n44n+2∗2n4
#include <cstdio>
using namespace std;
typedef long long ll;
const int P = 10007;
ll n;
ll power(ll x, ll t) {
ll ret = 1;
for(; t; t >>= 1, x = x * x % P) {
if(t & 1) {
ret = ret * x % P;
}
}
return ret;
}
int main() {
int T;
scanf("%d", &T);
while(T--) {
scanf("%lld", &n);
printf("%lld\n", (power(4, n) + 2 * power(2, n)) % P * power(4, P - 2) % P);
}
return 0;
}