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. pyhton3 logging模块

    1.简单的将日志打印到屏幕   import logging logging.debug('This is debug message')logging.info('This is info mess ...

  2. 【渗透神器系列】Fiddler (收藏)

    发表于 2017-04-27   |   分类于 安全工具   |     |   阅读次数 593 人世起起落落 左手边上演的华灯初上 右手边是繁华落幕的星点余光 本篇作为渗透神器系列第二篇,将介绍 ...

  3. Loadrunder之脚本篇——关联函数对话框详解

    Insert->New Step,打开Add Step对话框 选择函数web_reg_save_param,点击OK,打开关联函数设置窗口 说明: Parameter Name 此处设置存放参数 ...

  4. iOS 几种常用的 crash log 崩溃信息调试方法

    前言:crash log 对 定位崩溃问题 ,并且不容易复现,尤其是及时对appstore 上正在运营的 app 的迭代改进来说 非常重要. 1 crash两种情况 1.1 测试环境下 追踪bug 1 ...

  5. 【Tech】单点登录系统CAS服务器端搭建及实现用户名密码由MYSQL数据库验证

    CAS是YALE大学发起的一个开源项目,旨在为web应用系统提供一种可靠的单点登录方法.它主要分为client和server端,server端负责对用户的认证工作,client端负责处理对客户端受保护 ...

  6. 嵌入式C函数优化

    0. 引言 这是一个简单函数的优化,但却体现了代码易读性和效率的综合考虑. 如果问我如何写出优秀的代码,答曰:再写一版. 1. 版本1 从环形buffer中取出数据,然后放到一个结构体中.buffer ...

  7. STM32f103的电阻触摸屏的五点校正算法

    源:STM32f103的电阻触摸屏的五点校正算法 STM32f103的触摸屏的设置与使用

  8. java实现文件的压缩和解压

    java实现文件的压缩和解压 代码压缩实现 package com.hjh.demo.zip; import java.io.BufferedInputStream; import java.io.F ...

  9. vm+ubuntu联网

    在vm下刚装了ubuntu,就是上不了网,确认以下配置后方可以 1.我的电脑开机自动把VM的相关服务都关闭了,需要手动打开 在控制面板中搜索服务,手动启动vm服务 2.在适配器里启用vm网卡 3.使用 ...

  10. 3.Pycharm和navicate的使用

    Pycharm的下载 进入到Pycharm官网,进入网页的最下边,下载企业版enterprise(可试用30天),企业版提供了创建项目.run等功能,而免费版没有这些功能 pycharm的使用: 在f ...