题目大意:求长度为n的DNA单链,满足C和T出现偶数次,A和G任意,这样的DNA单链有多少种
去学了下指数生成函数……
设函数A(x)=∑+∞i=0Aixii!
那么两种元素的组合就是A(x)?B(x)
理由很简单,我们发现
Aixii!?Bjxjj!=Ai?Bj?(i+j)!i!?j!xi+j(i+j)!
组合数就这样被搞出来了
那么对于此题,A和G的生成函数显然是1+x1!+x22!+...=ex
而C和T的生成函数则是1+x22!+x44!+...=ex+e?x2
故答案函数F(x)=e2x(ex+e?x2)2
=e4x+2e2x+14
因此n次项系数为4n+2?2n4=4n?1+2n?1
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MOD 400
using namespace std;
unsigned long long n;
int Quick_Power(int x,unsigned long long y)
{
int re=1;
while(y)
{
if(y&1) (re*=x)%=MOD;
(x*=x)%=MOD; y>>=1;
}
return re;
}
int main()
{
int T;
while(cin>>T,T)
{
int cnt=0;
for(;T;T--)
{
cin>>n;
printf("Case %d: ",++cnt);
cout<<(Quick_Power(4,n)+2*Quick_Power(2,n))%MOD/4<<endl;
}
puts("");
}
return 0;
}
时间: 2024-10-10 09:10:39