题意:
      给你n个人,排成一个长度是n的队伍,人只有两类f,m,问可以有多少种排法使度列中不出现fff,fmf这样的子串。

思路:
      一开始暴力,结果超时了,其实这个题目要是能找到类似于斐波那契那样的公式,就可以瞬间用矩阵乘法+快速幂秒掉大数据,现在我们来找公式,我们现在来讨论当前队列的最后一个字母,如果是m那么之前的所有+m都不会冲突,所以有f(n-1)个,如果是f呢?,这个时候我们要考虑不可以出现fff,fmf这样的序列,那么新形成的后缀也就只有mmf,mff可以满足了,mmf前面是什么都可以满足,所以f(n - 3),而mff还得往前找,只有mmff前面是什么都可以,这时是f(n
- 4),所以最终 f(n) = f(n - 1) + f(n - 3) + f(n - 4),接下来就构造矩阵,矩阵的构造也很简单,但是构造的时候别忘了,矩阵没有交换律的。

f(x)f(x+1)f(x+2)f(x+3)  *  [ 0 0 0 1 ] =  f(x+1)f(x+2)f(x+3)f(x+4)        

                                      [ 1 0 0 1 ]

                                      [ 0 1 0 0 ]

                                      [ 0 0 1 1 ]

构造完矩阵就可以用矩阵快速幂吊打这道题了。


#include<stdio.h>
#include<string.h>

int
MOD; typedef struct
{
int
mat[5][5];
}
A; A mat_mat(A a ,A b)
{

A c;
memset(c.mat ,0 ,sizeof(c.mat));
for(int
k = 1 ;k <= 4 ;k ++)
for(int
i = 1 ;i <= 4 ;i ++)
if(
a.mat[i][k])
for(int
j = 1 ;j <= 4 ;j ++)
c.mat[i][j] = (c.mat[i][j] + a.mat[i][k] * b.mat[k][j]) % MOD;
return
c;
}
A quick_mat(A a ,int b)
{

A c;
memset(c.mat ,0 ,sizeof(c.mat));
for(int
i = 1 ;i <= 4 ;i ++)
c.mat[i][i] = 1;
while(
b)
{
if(
b & 1) c = mat_mat(c ,a);
a = mat_mat(a ,a);
b >>= 1;
}
return
c;
} int main ()
{

A a ,b;
int
n ,num[5];
memset(a.mat ,0 ,sizeof(a.mat));
a.mat[1][4] = a.mat[2][1] = a.mat[2][4] = 1;
a.mat[3][2] = a.mat[4][3] = a.mat[4][4] = 1;
num[0] = 1 ,num[1] = 2 ,num[2] = 4 ,num[3] = 6;
while(~
scanf("%d %d" ,&n ,&MOD))
{
if(
n <= 3)
{

printf("%d\n" ,num[n] % MOD);
continue;
}

b = quick_mat(a ,n - 3);
int
ans = num[0] * b.mat[1][4] + num[1] * b.mat[2][4] + num[2] * b.mat[3][4] + num[3] * b.mat[4][4];
printf("%d\n" ,ans % MOD);
}
return
0;
}

hdu2604 矩阵快速幂的更多相关文章

  1. hdu2604(递推,矩阵快速幂)

    题目链接:hdu2604 这题重要的递推公式,找到公式就很easy了(这道题和hdu1757(题解)类似,只是这道题需要自己推公式) 可以直接找规律,推出递推公式,也有另一种找递推公式的方法:(PS: ...

  2. 矩阵快速幂小结-Hdu2604

    矩阵快速幂可以想象为线性代数的矩阵相乘,主要是运用于高效的计算矩阵高次方. 将矩阵两两分组,若要求a^n,即知道a^(n/2)次方即可,矩阵快速幂便是运用的这个思路. 比方想求(A)^7那么(A)^6 ...

  3. 【递推+矩阵快速幂】【HDU2604】【Queuing】

    Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  4. HDU2604【矩阵快速幂】

    思路: 把fm看成01,f-1,m-0: 不能存在101,111; dp[i]代表第i结尾的方案数: ①:结尾是0一定行:只要i-1序列里添个0就好了,dp[i]+=dp[i-1]: ②:结尾是1   ...

  5. HDU2604:Queuing(矩阵快速幂+递推)

    传送门 题意 长为len的字符串只由'f','m'构成,有2^len种情况,问在其中不包含'fmf','fff'的字符串有多少个,此处将队列换成字符串 分析 矩阵快速幂写的比较崩,手生了,多练! 用f ...

  6. HDU 2604 Queuing( 递推关系 + 矩阵快速幂 )

    链接:传送门 题意:一个队列是由字母 f 和 m 组成的,队列长度为 L,那么这个队列的排列数为 2^L 现在定义一个E-queue,即队列排列中是不含有 fmf or fff ,然后问长度为L的E- ...

  7. 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)

    题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...

  8. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...

  9. 51nod 1113 矩阵快速幂

    题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> ...

随机推荐

  1. Ubuntu小配置

    Ubuntu 拍摄快照 在虚拟机安装好.配置号后各拍摄一次快照,并存储. 可在虚拟机出错后回滚 Root用户 Ubuntu默认不能以 Root用户身份直接登录 因此,正常操作时在需要调用 root权限 ...

  2. Java入门和环境配置ideaJ安装

    Java入门及环境搭建 目录 Java入门及环境搭建 什么是Java Java Java的发展 Java的特性和优势 Java三大版本 JDK JRE JVM JAVA开发环境搭建 安装JDK 卸载J ...

  3. 使用wireshark 抓取 http https tcp ip 协议进行学习

    使用wireshark 抓取 http https tcp ip 协议进行学习 前言 本节使用wireshark工具抓包学习tcp ip http 协议 1. tcp 1.1 tcp三次握手在wire ...

  4. apicloud打包的ios证书的获取方法

    apicloud云编译的时候,需要测试证书或者正式证书进行编译. 那么这个证书是怎么来的呢?通过什么渠道可以获取呢? 这里我介绍下使用香蕉云编这个在线工具来生成: 1.登录香蕉云编,生成证书的csr文 ...

  5. springboot源码解析-管中窥豹系列之BeanPostProcessor(十二)

    一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...

  6. Java代码实现热部署

    一.思路 0. 监听java文件最后修改时间,如果发生变化,则表示文件已经修改,进行重新编译 1. 编译java文件为 class文件 2. 通过手写类加载器,加载 class文件 ,创建对象 3. ...

  7. Scrapy 5+1 ——五大坑附送一个小技巧

    笔者最近对scrapy的学习可谓如火如荼,虽然但是,即使是一整天地学习下来也会有中间两三个小时的"无效学习",不是笔者开小差,而是掉进了深坑出不来. 在此,给各位分享一下作为一名S ...

  8. 创建第一个HTML文件

    首先右键新建文本文档,然后打开新建的文档,文本内容写上: <html> <head> <title>我的HTML标题</title> </head ...

  9. jenkins构建maven聚合项目,发布jar包,可配置单独发布某个模块

    https://blog.csdn.net/qq_42703181/article/details/109643330

  10. 201871030116-李小龙 实验二 个人项目—《D{0-1} KP》项目报告

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...