Problem 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

矩阵思路:用f[i][1]表示前i个里面有偶数个A和偶数个C,f[i][2]表示....然后易得。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL long long
const int maxn=;
const int Mod=;
struct mat
{
int m[maxn][maxn];
mat(){memset(m,,sizeof(m));};
mat friend operator *(mat a,mat b)
{
mat d;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
for(int k=;k<=;k++)
d.m[i][j]=(d.m[i][j]+a.m[i][k]*b.m[k][j])%Mod;
return d;
}
mat friend operator ^(mat a,LL n)
{
mat d;
for(int i=;i<=;i++) d.m[i][i]=;
while(n){
if(n&) d=d*a;
a=a*a;
n>>=;
}
return d;
}
};
int main()
{
int i,Case,T;
LL n;
while(~scanf("%d",&T)&&T){
Case=;
while(T--){
scanf("%lld",&n);
mat b,ans;
b.m[][]=;b.m[][]=;b.m[][]=;
b.m[][]=;b.m[][]=;b.m[][]=;
b.m[][]=;b.m[][]=;b.m[][]=;
b.m[][]=;b.m[][]=;b.m[][]=;
ans=b^n;
printf("Case %d: %d\n",++Case,ans.m[][]);
}
printf("\n");
}
return ;
}

然而不小心看到其他方法,一下子蒙圈了,QwQ:

方法1,找循环结构,不难想。

方法2,DP,还没有看,多半和循环结构有关。

方法3,指数形母函数,和泰勒公式有关。

高数学了泰勒,我之前也学了母函数,不过比较基础:nmphy的母函数

然后就翻论文看各种母函数。

后面发现母函数还可以解决【树的计数】问题,因为之前看过Prufer和Cayley 算法,然后就去看母函数来解决树的计数。

树的计数问题。

外文的看不懂,GG。

中文里感觉好的:

http://www.docin.com/p-538824587.html  kb就是kb,大佬!

http://www.docin.com/p-140832665.html  这篇论文和其他论文有相似之处,也有独到之处,还不错。

反正越看越觉得自己数学不够用。

http://ishare.iask.sina.com.cn/f/67448295.html 史老爷,看过他的数学分析的举个手。

学会了高阶母函数再来补充!

2017-11-15

--------------------------------------------------------------分界线就是我----------------------------------------------------------------------

2017-11-20:

感觉母函数很神奇,很强大,用处太多了。

ORZ!!!

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL long long
int pow(int a,LL n)
{
int ans=;
while(n){
if(n&) ans*=a;
ans%=;
a=a*a%;
n>>=;
}
return ans;
}
int main()
{
int T,i,j,ans,Case,m;
LL n;
while(~scanf("%d",&T)){
if(T==) return ;
Case=;
for(i=;i<=T;i++){
scanf("%lld",&n);
printf("Case %d: ",++Case);
printf("%d\n",(pow(,n-)+pow(,n-))%);
}
printf("\n");
}
return ;
}

反正就是用这样【简单的公式】就能推出来,所以有时间的伙伴一定要看看母函数。

这里不做解释,自己看书,毕竟我也讲不清楚。

HDU2065"红色病毒"问题【指数型母函数】的更多相关文章

  1. hdu2065 "红色病毒"问题 指数型母函数

    关于指数型母函数的题目,通过用公式并展开得到系数做的吧,取最后两位就是对100取模 #include<stdio.h> int QuickPow(int a,long long n,int ...

  2. HDU 2065 “红色病毒”问题 --指数型母函数

    这种有限制的类棋盘着色问题一般可以用指数型母函数来解决,设Hn表示这样的着色数,首先H0=1,则Hn等于四个字母的(A,B,C,D)的多重集合的n排列数,其中每个字母的重数是无穷,且要求A,C出现的次 ...

  3. HDU2065 "红色病毒"问题 【组合数学 二项式定理】

    HDU2065 "红色病毒"问题 Description: 医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被称为"红色 ...

  4. HDU2065 “红色病毒”问题 (指数型母函数经典板题)

    题面 医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被称为"红色病毒",经研究发现,该病毒及其变种的DNA的一条单链中,胞嘧啶, ...

  5. hdu2065"红色病毒"问题(指数母函数+快速幂取模)

    "红色病毒"问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  6. [HDU2065] "红色病毒"问题

    传送门:>Here< 题意:现在有一长度为N的字符串,满足一下条件: (1) 字符串仅由A,B,C,D四个字母组成; (2) A出现偶数次(也可以不出现); (3) C出现偶数次(也可以不 ...

  7. 【指数型母函数+非递归快速幂】【HDU2065】"红色病毒"问题

    大一上学完数分上后终于可以搞懂指数型母函数了.. 需要一点关于泰勒级数的高数知识 题目在此: "红色病毒"问题 Time Limit: 1000/1000 MS (Java/Oth ...

  8. HDU 2065 "红色病毒"问题(生成函数)

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  9. hdu1521 排列组合(指数型母函数)

    题意: 有n种物品,并且知道每种物品的数量ki.要求从中选出m件物品的排数.         (全题文末) 知识点: 普通母函数 指数型母函数:(用来求解多重集的排列问题) n个元素,其中a1,a2, ...

随机推荐

  1. classmethod

    描述 classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等. 语法 classmeth ...

  2. 字典树 trie树 学习

    一字典树 字典树,又称单词查找树,Trie树,是一种树形结构,哈希表的一个变种   二.性质 根节点不包含字符,除根节点以外的每一个节点都只包含一个字符: 从根节点到某一节点,路径上经过的字符串连接起 ...

  3. Docker容器技术-基础与架构

    一.什么是容器 容器是对应用程序及其依赖关系的封装. 1.容器的优点 容器与主机的操作系统共享资源,提高了效率,性能损耗低 容器具有可移植性 容器是轻量的,可同时运行数十个容器,模拟分布式系统 不必花 ...

  4. P4299 首都

    题目 P4299 首都 做法 这题是动态维护树的重心,连边后找到两棵树的重心拉一条链(性质:新重心在链上),然后暴力爬 要注意: 1.是找重心的过程中要先把旋转标记放下来,因为\(Splay(x)\) ...

  5. iOS_mapKit与Core Location

    目 录: 一.使用MKMap控件 二.根据地址定位 三.在地图上添加锚点   iOS从3.0版本开始提供了MapKit.frameword支持.该框架提供了一个可被嵌入到应用程序中的地图视图类MKMa ...

  6. IEnumerable的一些基本方法

    在说明用法之后,先要弄点数据. class Product { public int ID { get; set; } public string Name { get; set; } public ...

  7. Introduction to vSphere Integrated Containers

    vSphere Integrated Containers enables IT teams to seamlessly run traditional workloads and container ...

  8. Go 文件操作

    一.读取文件 普通版 ioutil版 bufio版 二.文件写入 普通版 ioutil版 bufio版 三.文件复制 ioCopy 1.普通版读取文件 package main import ( &q ...

  9. Linux软件安装常用方法

    1.软件安装卸载,分几种情况: A:RPM包,这种软件包就像windows的EXE安装文件一样,各种文件已经编译好,并打了包,哪个文件该放到哪个文件夹,都指定好了,安装非常方便,在图形界面里你只需要双 ...

  10. PHP 5.2、5.3、5.4、5.5、5.6 版本区别对比以及新功能详解

    截至目前(2015.1), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护  的 PHP5.2, 其余的一半用户在使用 PHP5.3 . 因为 PHP 那“集百家之 ...