HDU2065 "红色病毒"问题 【组合数学 二项式定理】
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;
}
HDU2065 "红色病毒"问题 【组合数学 二项式定理】的更多相关文章
- hdu2065"红色病毒"问题(指数母函数+快速幂取模)
"红色病毒"问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU2065"红色病毒"问题【指数型母函数】
Problem Description 医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被称为"红色病毒",经研究发现,该病毒及其 ...
- HDU2065 “红色病毒”问题 (指数型母函数经典板题)
题面 医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被称为"红色病毒",经研究发现,该病毒及其变种的DNA的一条单链中,胞嘧啶, ...
- [HDU2065] "红色病毒"问题
传送门:>Here< 题意:现在有一长度为N的字符串,满足一下条件: (1) 字符串仅由A,B,C,D四个字母组成; (2) A出现偶数次(也可以不出现); (3) C出现偶数次(也可以不 ...
- hdu2065 "红色病毒"问题 指数型母函数
关于指数型母函数的题目,通过用公式并展开得到系数做的吧,取最后两位就是对100取模 #include<stdio.h> int QuickPow(int a,long long n,int ...
- 【指数型母函数+非递归快速幂】【HDU2065】"红色病毒"问题
大一上学完数分上后终于可以搞懂指数型母函数了.. 需要一点关于泰勒级数的高数知识 题目在此: "红色病毒"问题 Time Limit: 1000/1000 MS (Java/Oth ...
- HDUOJ-----2065"红色病毒"问题
"红色病毒"问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 2065 "红色病毒"问题(生成函数)
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- HDU 2065 “红色病毒”问题 --指数型母函数
这种有限制的类棋盘着色问题一般可以用指数型母函数来解决,设Hn表示这样的着色数,首先H0=1,则Hn等于四个字母的(A,B,C,D)的多重集合的n排列数,其中每个字母的重数是无穷,且要求A,C出现的次 ...
随机推荐
- 【Java基础】基本语法-变量与运算符
基本语法-变量与运算符 关键字和保留字 关键字定义:被 Java 语言赋予了特殊含义,用做专门用途的字符串(单词). 关键字特点:关键字中所有字母都为小写. 用于定义数据类型:class.interf ...
- 【JavaWeb】Tomcat 使用
Tomcat 使用 基础概念 JavaWeb: JavaWeb:所有通过 Java 语言编写可以通过浏览器访问的程序的总称,它是是基于请求和响应来开发的: 请求:客户端给服务器发送数据,即 Reque ...
- 牛客剑指Offer-数字在升序数组中出现的次数
题目 统计一个数字在升序数组中出现的次数. 示例1 输入 [1,2,3,3,3,3,4,5],3 返回值 4 题解 第一种最简单的方法是O(n)复杂度.遍历数组统计结果. public int Get ...
- zookeeper读取事务日志、快照日志
zookeeper的事务日志的格式如 log.xxx, xxx表示顺序序号 我使用的zookeeper版本:3.5.5 事务日志 执行命令 java -cp .:/tmp/zookeeper-3.5. ...
- 【EXP】导出数据库dmp文件,只有几张表有数据,剩下的所有表只有表结构没有数据
导出一个dmp,指定的表中有数据,其他的表只有表结构, 有数据的表只有几张,分别是A,B,C三张表,剩下的表都没有数据 思路: 导出一个111.dmp,所有的表都只是表结构 将111.dmp导入到新创 ...
- CSAPP:Lab1 -DataLab 超详解
写在前面 之前考研的时候csapp的书有刷过5,6遍,所以对书本知识还算比较了解.恰逢最近在学c++的时候,顺带刷一下大名鼎鼎的csapp实验. 0. 环境准备 最好准备一个纯净的Linux系统这里建 ...
- EnvironmentPostProcessor怎么做单元测试?阿里P7解答
简介 从Spring Boot 1.3开始,我们可以在应用程序上下文刷新之前使用EnvironmentPostProcessor来自定义应用程序的Environment.Environment表示当前 ...
- click的简单使用
click的简单使用 先通过一个简单的例子来认知一下click把 import click @click.command() @click.option('-p', '--port', default ...
- NodeJS连接MongoDB数据库
NodeJS连接MongoDB数据库 连接数据库的js文件[我将其命名为(connect.js)] // 引入mongoose第三方模块 const mongoose = require('mongo ...
- Fastjson1.2.24反序列化漏洞复现
Fastjson1.2.24 目录 1. 环境简介 1.1 物理环境 1.2 网络环境 1.3 工具 1.4 流程 2. Docker+vulhub+fastjson1.2.24 2.1 Docker ...