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. Sliverlight变换特性

    通过变换,可以为Silverlight图形对象提供旋转.缩放.扭曲和移动的特效.如果图形元素需要通过修改坐标系统来改变元素显示,可能需要使用变换功能.一般来说,所有的变换使用矩形数学改变图形元素的坐标 ...

  2. arm64的适配问题,这次真醉了

    写过tableView的童鞋都知道,有必须的两个代理方法要实现,还有几个选择实现的. 必须实现的代理方法: ~设置行数 - (NSInteger)tableView:(UITableView *)ta ...

  3. C51数据类型

  4. VSCode隐藏node_modules目录

    使用VSCode,打开一个工程时,发现node_modules目录包含到工程中了,问题: settings.json配置如下,可以自己定制忽略的文件夹: search.exclude 用来忽略搜索的文 ...

  5. Linux Shell编程 cut、print命令

    cut命令:查找符合条件的列 cut  命令是在文件中提取符合条件的列,虽然 cut 命令用于提取符合条件的列,但是也要一行一行地进行数据提取.也就是说,先要读取文本的第一行数据,在此行中判断是否有符 ...

  6. uCOS-II的学习笔记(共九期)和例子(共六个)

    源:uCOS-II的学习笔记(共九期)和例子(共六个) 第一篇 :学习UCOS前的准备工作http://blog.sina.com.cn/s/blog_98ee3a930100w0eu.html 第二 ...

  7. numpy模块之创建矩阵、矩阵运算

    本文参考给妹子讲python  https://zhuanlan.zhihu.com/p/34673397 NumPy是Numerical Python的简写,是高性能科学计算和数据分析的基础包,他是 ...

  8. INSPIRED启示录 读书笔记 - 第23章 改进现有产品

    不是一味地添加功能 改进产品不是简单地满足个别用户的要求,也不能对用户调查的结果照单全收.能提高指标的功能才是关注的重点.应该找准方向,分析关键指标,有针对性地改进产品

  9. JSP DAO(Model)

    示例代码: 1. Users类 package com.po; public class Users { private String username; private String passwor ...

  10. RazorEngine性能研究(反射的延深)

    先说下结论 1)RazorEngine 确实很慢,编译过程特别慢,编译过后仍不适合大量重复调用的情况(一次调用可以接受). 2 )   RazorEngine 和 asp.net mvc 里的Razo ...