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, ...
随机推荐
- Sliverlight变换特性
通过变换,可以为Silverlight图形对象提供旋转.缩放.扭曲和移动的特效.如果图形元素需要通过修改坐标系统来改变元素显示,可能需要使用变换功能.一般来说,所有的变换使用矩形数学改变图形元素的坐标 ...
- arm64的适配问题,这次真醉了
写过tableView的童鞋都知道,有必须的两个代理方法要实现,还有几个选择实现的. 必须实现的代理方法: ~设置行数 - (NSInteger)tableView:(UITableView *)ta ...
- C51数据类型
- VSCode隐藏node_modules目录
使用VSCode,打开一个工程时,发现node_modules目录包含到工程中了,问题: settings.json配置如下,可以自己定制忽略的文件夹: search.exclude 用来忽略搜索的文 ...
- Linux Shell编程 cut、print命令
cut命令:查找符合条件的列 cut 命令是在文件中提取符合条件的列,虽然 cut 命令用于提取符合条件的列,但是也要一行一行地进行数据提取.也就是说,先要读取文本的第一行数据,在此行中判断是否有符 ...
- uCOS-II的学习笔记(共九期)和例子(共六个)
源:uCOS-II的学习笔记(共九期)和例子(共六个) 第一篇 :学习UCOS前的准备工作http://blog.sina.com.cn/s/blog_98ee3a930100w0eu.html 第二 ...
- numpy模块之创建矩阵、矩阵运算
本文参考给妹子讲python https://zhuanlan.zhihu.com/p/34673397 NumPy是Numerical Python的简写,是高性能科学计算和数据分析的基础包,他是 ...
- INSPIRED启示录 读书笔记 - 第23章 改进现有产品
不是一味地添加功能 改进产品不是简单地满足个别用户的要求,也不能对用户调查的结果照单全收.能提高指标的功能才是关注的重点.应该找准方向,分析关键指标,有针对性地改进产品
- JSP DAO(Model)
示例代码: 1. Users类 package com.po; public class Users { private String username; private String passwor ...
- RazorEngine性能研究(反射的延深)
先说下结论 1)RazorEngine 确实很慢,编译过程特别慢,编译过后仍不适合大量重复调用的情况(一次调用可以接受). 2 ) RazorEngine 和 asp.net mvc 里的Razo ...