传送门

题意

长为len的字符串只由'f','m'构成,有2^len种情况,问在其中不包含'fmf','fff'的字符串有多少个,此处将队列换成字符串

分析

矩阵快速幂写的比较崩,手生了,多练!

用f(n)表示n个人满足条件的结果,那么如果最后一个人是m的话,那么前n-1个满足条件即可,就是f(n-1);

如果最后一个是f那么这个还无法推出结果,那么往前再考虑一位:那么后三位可能是:mmf, fmf, mff, fff,其中fff和fmf不满足题意所以我们不考虑,但是如果是

mmf的话那么前n-3可以找满足条件的即:f(n-3);如果是mff的话,再往前考虑一位的话只有mmff满足条件即:f(n-4)

所以f(n)=f(n-1)+f(n-3)+f(n-4),递推会跪,可用矩阵快速幂

构造一个矩阵:

代码

#include<cstdio>
#include<cstring>
using namespace std; struct matrix
{
int a[5][5];
int row,col;
}ret,ans,tmp;
int n,mod;
matrix multi(matrix x,matrix y)
{
matrix t;
for(int i=1;i<=4;++i)for(int j=1;j<=4;++j)
{
t.a[i][j]=0;
for(int k=1;k<=4;++k) (t.a[i][j]+=x.a[i][k]*y.a[k][j])%=mod;
}
//for(int i=1;i<=4;++i) printf("%d\n",t.a[i][1]);
return t;
}
void fast_mod(int p)
{
for(int i=1;i<=4;++i)for(int j=1;j<=4;++j)if(i==j) tmp.a[i][j]=1;else tmp.a[i][j]=0;
ret.a[1][1]=1,ret.a[1][2]=0,ret.a[1][3]=1,ret.a[1][4]=1;
ret.a[2][1]=1,ret.a[2][2]=0,ret.a[2][3]=0,ret.a[2][4]=0;
ret.a[3][1]=0,ret.a[3][2]=1,ret.a[3][3]=0,ret.a[3][4]=0;
ret.a[4][1]=0,ret.a[4][2]=0,ret.a[4][3]=1,ret.a[4][4]=0;
//ret.col=ret.row=tmp.row=tmp.col=4;
for(;p;p>>=1,ret=multi(ret,ret)) if(p&1) tmp=multi(tmp,ret);
}
int main()
{
memset(ans.a,0,sizeof(ans.a));
ans.row=4,ans.col=1;
ans.a[1][1]=9;
ans.a[2][1]=6;
ans.a[3][1]=4;
ans.a[4][1]=2;
while(scanf("%d %d",&n,&mod)==2)
{
if(n==0) { puts("1");continue; }
if(n<=4) {printf("%d\n",(ans.a[4-n+1][1])%mod);continue;}
fast_mod(n-4);
// for(int i=1;i<=4;++i) printf("%d\n",ans.a[i][1]);
int q=9*tmp.a[1][1]+6*tmp.a[1][2]+4*tmp.a[1][3]+2*tmp.a[1][4];
printf("%d\n",q%mod);
//puts("2");
//printf("%d\n",ans.a[1][1]);
}
}

HDU2604:Queuing(矩阵快速幂+递推)的更多相关文章

  1. ZZNU 2182 矩阵dp (矩阵快速幂+递推式 || 杜教BM)

    题目链接:http://47.93.249.116/problem.php?id=2182 题目描述 河神喜欢吃零食,有三种最喜欢的零食,鱼干,猪肉脯,巧克力.他每小时会选择一种吃一包. 不幸的是,医 ...

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

    GTY's birthday gift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  3. hdu---(2604)Queuing(矩阵快速幂)

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

  4. POJ3233:Matrix Power Series(矩阵快速幂+递推式)

    传送门 题意 给出n,m,k,求 \[\sum_{i=1}^kA^i\] A是矩阵 分析 我们首先会想到等比公式,然后得到这样一个式子: \[\frac{A^{k+1}-E}{A-E}\] 发现要用矩 ...

  5. HDU.2640 Queuing (矩阵快速幂)

    HDU.2640 Queuing (矩阵快速幂) 题意分析 不妨令f为1,m为0,那么题目的意思为,求长度为n的01序列,求其中不含111或者101这样串的个数对M取模的值. 用F(n)表示串长为n的 ...

  6. HDU2604【矩阵快速幂】

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

  7. hdu 2842(矩阵高速幂+递推)

    题意:一个中国环的游戏,规则是一个木棒上有n个环.第一个环是能够任意放上或拆下的,剩下的环x假设想放上或拆下必须前一个环x-1是放上的且前x-2个环所有是拆下的,问n个环最少多少次操作能够所有拆掉. ...

  8. CF821 E. Okabe and El Psy Kongroo 矩阵快速幂

    LINK 题意:给出$n$条平行于x轴的线段,终点$k$坐标$(k <= 10^{18})$,现在可以在线段之间进行移动,但不能超出两条线段的y坐标所夹范围,问到达终点有几种方案. 思路:刚开始 ...

  9. HDU 3292 【佩尔方程求解 && 矩阵快速幂】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=3292 No more tricks, Mr Nanguo Time Limit: 3000/1000 M ...

随机推荐

  1. Python基础教程笔记——第7章:更加抽象(类)

    下面进入Python的面向对象: 对象的魔力: 多态:---可以对不同类的对象使用同样的操作 封装:---对外部隐藏对象内部的工作方式 继承:---以普通的类为基础建立专门的类对象 (1)多态: is ...

  2. Memcached 管理与监控工具 MemAdmin

    MemAdmin是一款可视化的Memcached管理与监控工具,基于 PHP5 & JQuery 开发,体积小,操作简单. 主要功能: 服务器参数监控:STATS.SETTINGS.ITEMS ...

  3. 由八数码问题引入。对BFS有更深考虑

    12号到今天共研究八数码问题poj1077,首先用的是普通BFS,遇到很多问题,开始用一个二级指针作为结构成员,知道了二级指针与二维数值名的不同!http://write.blog.csdn.net/ ...

  4. OC-scrollview加载多个控制器界面的优化

    在开发过程中,经常有一个控制器中多个字控制器界面的管理,如下图: 这种实现方式,很多种,今天主要记录用scrollview实现的方法.并且只加载当前显示界面的数据. 思路: (1)创建3个需要展示的控 ...

  5. python学习之 - XML

    xml模块定义:实现不同语言或程序之间进行数据交换的协议.格式如下:通过<>节点来区别数据结构如:<load-on-startup(这个是标签) test="value&q ...

  6. 魔咒词典--hdu1880(字符串 暴力)

    http://acm.hdu.edu.cn/showproblem.php?pid=1880 不要想其他的   暴力就能过 #include <iostream> #include < ...

  7. HDU 1558

    输入线段的两个短点,如果线段相交那么他们属于一个集合,查看第i条线段所在的集合有几条线段. 好久没码码了,总是各种蠢. 首先找出两条直线的方程,求解相交点的横坐标,然后看是不是在线段内部. 没有注意题 ...

  8. Java并发编程,3分分钟深入分析volatile的实现原理

    volatile原理 volatile简介 Java内存模型告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理. 线程在工作内存进行操作后何时会写到 ...

  9. JavaScript高级程序设计重点(一)

    1.一个完整的 JavaScript 实现应该由下列三 个不同的部分组成  核心(ECMAScript)  文档对象模型(DOM)  浏览器对象模型(BOM) 2.Undefined 类型只有一 ...

  10. hdu 1385 Minimum Transport Cost(floyd &amp;&amp; 记录路径)

    Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...