传送门

题意

长为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. MySQL基础架构

    前段时间订阅了<Mysql实战45讲>(从原理到实战),新的一年为自己充充电.对于这部分内容,我所知道的只来源于我大学里学习的课程<数据库原理>,在大学里学习的只是简单的查询, ...

  2. 51nod 马拉松30 C(构二分图+状压dp)

    题意 分析 考虑一个图能被若干简单环覆盖,那么一定是每个点恰好一个出度,恰好一个出度 于是类似最小路径覆盖的处理,我们可以把每个点拆成2个点i和i',如果有一条边(i,j),那么将i和j'连起来 那么 ...

  3. intelliJ IDEA工具快捷键

    F9            resume programe 恢复程序 Alt+F10        show execution point 显示执行断点 F8            Step Ove ...

  4. 【APUE】线程与信号

    每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的.进程中的信号是递送到单个线程的. 线程中pthread_sigmask函数类似与进程的sigprocmask函数,可以用来阻塞信号. ...

  5. VS自己定义project向导开发(Custom Wizard)

     在vs2010中定制VC++project向导有例如以下两种方式: 改动现有向导.以满足自己的须要: 使用"自己定义向导"来产生一个向导骨架,并设计自己的向导. 本文档仅仅讨 ...

  6. Android开发之自己定义Spinner样式的效果实现(源码实现)

    android系统自带的Spinner样式是远远满足不了我们实际开发过程中对Spinner UI风格的要求,因此我们肯定须要为了切合整个应用的风格,改动我们的Spinner样式.系统给我们提供了两种常 ...

  7. 解决CentOS java环境不生效的问题

    查看当前java版本 [root@localhost jdk1.6.0_45]# java -version openjdk version "1.8.0_65" OpenJDK ...

  8. 杭电 1150 moving tables

    http://acm.hdu.edu.cn/showproblem.php? pid=1050 Moving Tables Time Limit: 2000/1000 MS (Java/Others) ...

  9. github远程仓储和本地仓储进行关联

    我们使用github作为远程仓储,需要提前注册号一个github账号 由于github仓储和本地仓储之间传输是使用ssh加密的,所以需要一点设置, 1.创建sshkey  gitbash执行: ssh ...

  10. 【bzoj1561】[JSOI2009]去括号

    #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> # ...