HDU

来源:互联网 发布:淘宝二手苹果7可信吗 编辑:程序博客网 时间:2024/06/10 12:22

题目:

医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被称为"红色病毒",经研究发现,该病毒及其变种的DNA的一条单链中,胞嘧啶,腺嘧啶均是成对出现的。 
现在有一长度为N的字符串,满足一下条件: 
(1) 字符串仅由A,B,C,D四个字母组成; 
(2) A出现偶数次(也可以不出现); 
(3) C出现偶数次(也可以不出现); 
计算满足条件的字符串个数. 
当N=2时,所有满足条件的字符串有如下6个:BB,BD,DB,DD,AA,CC. 
由于这个数据肯能非常庞大,你只要给出最后两位数字即可. 

Input
每组输入的第一行是一个整数T,表示测试实例的个数,下面是T行数据,每行一个整数N(1<=N<2^64),当T=0时结束. 

Output
对于每个测试实例,输出字符串个数的最后两位,每组输出后跟一个空行.

思路:

由4种字母组成,A和C只能出现偶数次。
构造指数生成函数:(1+x/1!+x^2/2!+x^3/3!……)^2*(1+x^2/2!+x^4/4!+x^6/6!……)^2

计算出x^n的系数为4^(n-1)+2^(n-1)


代码:

#pragma comment(linker, "/STACK:1024000000,1024000000")#include<iostream>#include<algorithm>#include<ctime>#include<cstdio>#include<cmath>#include<cstring>#include<string>#include<vector>#include<map>#include<set>#include<queue>#include<stack>#include<list>#include<numeric>using namespace std;#define LL long long#define ULL unsigned long long#define INF 0x3f3f3f3f3f3f3f3f#define mm(a,b) memset(a,b,sizeof(a))#define PP puts("*********************");template<class T> T f_abs(T a){ return a > 0 ? a : -a; }template<class T> T gcd(T a, T b){ return b ? gcd(b, a%b) : a; }template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}// 0x3f3f3f3f3f3f3f3fconst LL MOD=100;LL pow_mod(LL a,LL b){    LL res=1;    while(b){        if(b&1) res=res*a%MOD;        a=a*a%MOD;        b/=2;    }    return res;}int main(){    int T,cas;    LL n;    while(~scanf("%d",&T)){        if(T==0)            break;        cas=0;        while(T--){            scanf("%lld",&n);            LL ans=pow_mod((LL)4,n-1)+pow_mod((LL)2,n-1);            printf("Case %d: %lld\n",++cas,ans%MOD);        }        printf("\n");    }    return 0;}


原创粉丝点击