HDU2065"红色病毒"问题【指数型母函数】
现在有一长度为N的字符串,满足一下条件:
(1) 字符串仅由A,B,C,D四个字母组成;
(2) A出现偶数次(也可以不出现);
(3) C出现偶数次(也可以不出现);
计算满足条件的字符串个数.
当N=2时,所有满足条件的字符串有如下6个:BB,BD,DB,DD,AA,CC.
由于这个数据肯能非常庞大,你只要给出最后两位数字即可.
1
4
20
11
3
14
24
6
0
矩阵思路:用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"红色病毒"问题【指数型母函数】的更多相关文章
- hdu2065 "红色病毒"问题 指数型母函数
关于指数型母函数的题目,通过用公式并展开得到系数做的吧,取最后两位就是对100取模 #include<stdio.h> int QuickPow(int a,long long n,int ...
- HDU 2065 “红色病毒”问题 --指数型母函数
这种有限制的类棋盘着色问题一般可以用指数型母函数来解决,设Hn表示这样的着色数,首先H0=1,则Hn等于四个字母的(A,B,C,D)的多重集合的n排列数,其中每个字母的重数是无穷,且要求A,C出现的次 ...
- HDU2065 "红色病毒"问题 【组合数学 二项式定理】
HDU2065 "红色病毒"问题 Description: 医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被称为"红色 ...
- HDU2065 “红色病毒”问题 (指数型母函数经典板题)
题面 医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被称为"红色病毒",经研究发现,该病毒及其变种的DNA的一条单链中,胞嘧啶, ...
- hdu2065"红色病毒"问题(指数母函数+快速幂取模)
"红色病毒"问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- [HDU2065] "红色病毒"问题
传送门:>Here< 题意:现在有一长度为N的字符串,满足一下条件: (1) 字符串仅由A,B,C,D四个字母组成; (2) A出现偶数次(也可以不出现); (3) C出现偶数次(也可以不 ...
- 【指数型母函数+非递归快速幂】【HDU2065】"红色病毒"问题
大一上学完数分上后终于可以搞懂指数型母函数了.. 需要一点关于泰勒级数的高数知识 题目在此: "红色病毒"问题 Time Limit: 1000/1000 MS (Java/Oth ...
- HDU 2065 "红色病毒"问题(生成函数)
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- hdu1521 排列组合(指数型母函数)
题意: 有n种物品,并且知道每种物品的数量ki.要求从中选出m件物品的排数. (全题文末) 知识点: 普通母函数 指数型母函数:(用来求解多重集的排列问题) n个元素,其中a1,a2, ...
随机推荐
- LeetCode:旋转图像【48】
LeetCode:旋转图像[48] 题目描述 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使 ...
- css系列(7)成品网页
本节介绍用css和html组合起来写的页面.(代码可以直接运行) (1)仿旧版腾讯微博注册页面:(文件夹地址:http://files.cnblogs.com/files/MenAng ...
- Git版本控制系统VCS
Git版本控制系统VCS 一.版本控制系统基本情况说明 版本控制是一种记录一个或者若干个文件内容的变化,以便将来查阅特定版本修订情况的系统 1.作用 记录文件的所有历史变化 随时可回复到任何一个历史状 ...
- vagrant搭建
1.在官网下载对应的vagrant版本 https://www.vagrantup.com/downloads.html (下载最新版本) https://releases.hashicorp.com ...
- Linux Shell编程 条件判断语法
if条件判断语句 单分支 if 条件语句 语法格式: if [条件判断式];then 程序 fi 或者 if [条件判断式] then 程序 fi 在使用单分支 if 条件查询时需要注意几点: if ...
- Android摄像头测量尺(Advanced Ruler Pro)使用方法
http://www.cnblogs.com/sinojelly/archive/2010/08/13/1799341.html Advanced Ruler Pro是一个Android手机应用程序, ...
- MongoDB部署指南
下載安裝包 http://www.mongodb.org/ 安裝MongoDB systemLog: destination: file path: E:\MongoDB\log\mongo.log ...
- PHP 最大化资源配置 Resource Limits 错误两则
报错信息1:PHP Fatal error: Allowed memory size of 25165824 bytes exhausted (tried to allocate 67108888 b ...
- Centos7.4 Nginx反向代理+负载均衡配置
Ningx是一款高性能的HTTP和反向代理服务器,配置起来也比较简单. 测试环境: 172.16.65.190 Nginx-反向代理 172.16.65.191 Ningx-Web 172.16.65 ...
- C++11 里lambda表达式的学习
最近看到很多关于C++11的文档,有些是我不怎么用到,所以就略过去了,但是lambda表达式还是比较常用的,其实最开始学习python的时候就觉得lambda这个比较高级,为什么C++这么弱.果然C+ ...