思路:

把fm看成01,f-1,m-0;

不能存在101,111;





dp[i]代表第i结尾的方案数;

①:结尾是0一定行:只要i-1序列里添个0就好了,dp[i]+=dp[i-1];

②:结尾是1

        如果***10或者***11的序列,加上1就不行;

        那我扩大,01或者11,很明显s[n-3]==1就不行,

        再扩大,/101/111/011/001,只有001一定行,所以就是dp[i-3]后面加个001就好了,dp[i]+=dp[i-3];

③:结尾为1,再扩大;

        0001/0011/0101/0111/1001/1011/1101/1111/  0001已经被第二种情况包括了,所以只有0011,那么就是dp[i-4]后面加个0011就好了;

之后再扩大,会发现没有啦~之前所有的情况都包括了;

所以dp[i]=dp[i-1]+dp[i-3]+dp[i-4];

跑一发矩阵快速幂就好了;

矩阵:

1 0 1 1

1 0 0 0

0 1 0 0

0 0 1 0

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int mod;
int n; struct asd{
int num[4][4];
}; asd mul(asd a,asd b)
{
asd ans;
memset(ans.num,0,sizeof(ans.num));
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
for(int k=0;k<4;k++)
ans.num[i][j]=(ans.num[i][j]+a.num[i][k]*b.num[k][j]%mod)%mod;
return ans;
} asd quickmul(int g,asd x)
{
asd ans;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
{
if(i==j)
ans.num[i][j]=1;
else
ans.num[i][j]=0;
}
while(g)
{
if(g%2)
ans=mul(ans,x);
x=mul(x,x);
g>>=1;
}
return ans;
} int main()
{
while(~scanf("%d%d",&n,&mod))
{
if(n<=4)
{
if(n==0)
printf("0\n");
else if(n==1)
printf("%d\n",2%mod);
else if(n==2)
printf("%d\n",4%mod);
else if(n==3)
printf("%d\n",6%mod);
else if(n==4)
printf("%d\n",9%mod);
continue;
}
asd tmp;
// 1 0 1 1
// 1 0 0 0
// 0 1 0 0
// 0 0 1 0
tmp.num[0][0]=1;tmp.num[0][1]=0;tmp.num[0][2]=1;tmp.num[0][3]=1;
tmp.num[1][0]=1;tmp.num[1][1]=0;tmp.num[1][2]=0;tmp.num[1][3]=0;
tmp.num[2][0]=0;tmp.num[2][1]=1;tmp.num[2][2]=0;tmp.num[2][3]=0;
tmp.num[3][0]=0;tmp.num[3][1]=0;tmp.num[3][2]=1;tmp.num[3][3]=0;
asd ans=quickmul(n-4,tmp);
printf("%d\n",(ans.num[0][0]*9%mod+ans.num[0][1]*6%mod+ans.num[0][2]*4%mod+ans.num[0][3]*2%mod)%mod);
}
return 0;
}

HDU2604【矩阵快速幂】的更多相关文章

  1. hdu2604 矩阵快速幂

    题意:      给你n个人,排成一个长度是n的队伍,人只有两类f,m,问可以有多少种排法使度列中不出现fff,fmf这样的子串.思路:      一开始暴力,结果超时了,其实这个题目要是能找到类似于 ...

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

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

  3. 矩阵快速幂小结-Hdu2604

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

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

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

  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. android好博客

    app集成支付宝.app缓存管理.app列表圆角设计.App自动更新之通知栏下载(有续).索引ListView.App数据格式之解析Json.拖拽ListView http://www.cnblogs ...

  2. Maximum likelihood from incomplete data via the EM algorithm (1977)

    Maximum likelihood from incomplete data via the EM algorithm (1977)  

  3. Redis(一)基础数据结构

    1.目录 Redis 基础数据结构 string (字符串) list (列表) hash (字典) set (集合) zset (集合) 容器型数据结构的通用规则 过期时间 2.Redis 基础数据 ...

  4. Eclipse中连接Sql Sever2008 -----转自Yogurshine

    Eclipse中连接Sql Sever2008 -----转自Yogurshine 一 SQl Sever服务器配置 1我之前已经安装好SQL Sever 2008R2.(注意:安装一遍未成功时,一定 ...

  5. Git配置的用户名密码在本地的存贮位置

    全局的用户名密码配置: //配置用户名和邮箱(全局) $ git config --global user.name "j***n" $ git config --global u ...

  6. Impala 安装笔记1一Cloudera CDH4.3.0安装

    Impala是Cloudera在受到Google的Dremel启发下开发的实时交互SQL大数据查询工具,Impala没有再使用缓慢的Hive+MapReduce批处理,而是通过使用与商用并行关系数据库 ...

  7. 对于URL中文和特殊字符的处理方法

    1.中文的处理方法 NSString* string1 = @"https://www.cloudsafe.com/文件夹"; NSString* string2 = [strin ...

  8. ThinkPHP 静态页缓存

    通过对ThinkPHP的学习,记录下静态页的缓存步骤,以便以后查阅: 1.配置配置文件/Admin/Conf/config.php代码如下: /*静态缓存*/ 'HTML_CACHE_ON'=> ...

  9. 关于web页自动适配屏幕大小

    一.先了解下html5的viewport使用 随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的 ...

  10. css中IE判断语句 if !IE

    1. <!–[if !IE]><!–> 除IE外都可识别 <!–<![endif]–> 2. <!–[if IE]> 所有的IE可识别 <! ...