HDU2065 "红色病毒"问题

Description:

医学界发现的新病毒因其蔓延速度和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:

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

Sample Input:

4

1

4

20

11

3

14

24

6

0

Sample Output:

Case 1: 2

Case 2: 72

Case 3: 32

Case 4: 0

Case 1: 56

Case 2: 72

Case 3: 56

题解:

可以发现\(AC\)等价,\(BD\)等价,现在要求计算方案数,A和C都是出现偶数次,我们首先枚举A和C一共出现的次数(一次出现指出现两个\(A\)或两个\(C\)),从\(0\)到\(\frac{n}{2}\),假设现在\(AC\)一共出现\(i\)次(一共\(2i\)个),接下来我们首先计算\(BD\)的位置的方案数,显然此时方案数为\(C(n,n-2i)\cdot 2^{n-2i}\)(先选定位置,然后每个位置可以放\(B\)或者\(D\)),接下来考虑\(AC\)的分配,也即把剩下的\(2i\)个位置分配给\(AC\),那么可以枚举\(A\)的出现次数,从\(0\)到\(2i\),且必然是偶数,根据以上,可以的到一个计数的表达式:

\(Ans = \sum_{i=0}^{\frac{n}{2}}[C(n,n-2i)\cdot 2^{n-2i}\cdot \sum^{i}_{j=0}C(2i,2j)]\)

可以发现里面的那个求和,其实就是计算组合数的偶数项,那么可以知道\(\sum_{j=0}^{i}C(2i,2j)=2^{2i-1}\),但是要注意\(i=0\)的情况下是不成立的,所以需要把\(i=0\)的项单独拿出来,式子就变成这样了:

\(Ans = 2^{n} + \sum_{i=1}^{\frac{n}{2}}[C(n,n-2i)\cdot 2^{n-2i}\cdot 2^{2i-1}]\)

\(=2^{n} + \sum_{i=1}^{\frac{n}{2}}[C(n,n-2i)\cdot 2^{n-1}]\)

\(=2^{n} + 2^{n-1}\cdot \sum_{i=1}^{\frac{n}{2}}[C(n,n-2i)]\)

\(=2^{n} + 2^{n-1}\cdot (\sum_{i=0}^{\frac{n}{2}}[C(n,n-2i)] - 1)\)

\(=2^{n} + 2^{n-1}\cdot (2^{n-1}-1)\)

\(=2^{n-1}\cdot (2^{n-1}+1)\)

//#pragma GCC optimize("O3")
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
function<void(void)> ____ = [](){ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);};
int qpow(long long p){
int ret = 1, base = 2;
while(p){
if(p&1) ret = ret * base % 100;
p >>= 1;
base = base * base % 100;
}
return ret;
}
void solve(int T){
for(int kase = 1; kase <= T; kase++){
int_fast64_t n; scanf("%I64d",&n);
printf("Case %d: %d\n",kase,(qpow(n-1)*(qpow(n-1)+1))%100);
}
puts("");
}
int main(){
int T; while(scanf("%d",&T) and T) solve(T);
return 0;
}

最新文章

  1. 异构(兼容dubbo)SOA系统架构(.net)优化升级
  2. NetBeans无法使用编码GBK安全地打开该文件(改为默认UTF-8)
  3. c# datagridview禁止自动生成额外列
  4. tp登录方法
  5. 在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping)
  6. 动画气泡指示当前滑动值--第三方开源--DiscreteSeekbar
  7. offsetTop和scrollTop的差别
  8. 转: vim简明教程
  9. (诊断)为GitHub添加SSH key时出现“Could not open a connection to your authentication agent”错误的应对方案(转)
  10. 设计模式:Prototype 原型模式 - 同学你抄过别人的作业么?-clone()方法的使用
  11. Professional C# 6 and .NET Core 1.0 - 40 ASP.NET Core
  12. Pandas数据处理+Matplotlib绘图案例
  13. springcloud-4:服务注册(hello-service)
  14. Java8新特性interface中的static方法和default方法
  15. react组件回顶部
  16. Python开发【第四篇】:模块
  17. Luogu 3119 [USACO15JAN]草鉴定Grass Cownoisseur
  18. Netty 出站缓冲区 ChannelOutboundBuffer 源码解析(isWritable 属性的重要性)
  19. maven学习(1)-简介与安装
  20. python 打包文件

热门文章

  1. 【Spring】Spring 入门
  2. 牺牲速度来节省内存,Redis是觉得自己太快了吗
  3. 常用的N个网站建议收藏
  4. Hbase snapshot数据迁移
  5. docker 安装linux centos 环境
  6. 【Java】面向对象
  7. kubernets之服务的实现方式
  8. 卷积神经网络学习笔记——SENet
  9. Java-web易混淆知识点整理
  10. uni-app 开发随笔(踩坑记录)