传送门

题意

长为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. 内存管理(——高质量程序设计语言C/C++第16章)

    内存的分配方式: 1.静态存储区分配:全局变量,static变量等,在程序编译时已经分配了存储内存,在程序运行的整个期间一直存在 2.程序的堆栈上:程序的局部变量,包括程序的形参等,只存在于程序的运行 ...

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

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

  3. BZOJ 2308 莫队入门经典

    题目链接  https://www.lydsy.com/JudgeOnline/problem.php?id=2038 参考博客 https://www.cnblogs.com/Paul-Guderi ...

  4. datasnap使用ipv6

    有些人说DATASNAP不支持IPv6,只支持IPv4. 这是不正确的. DATASNAP默认是使用IPv4在ipv6 环境下 怎样用datasnap?Params.Values['Communica ...

  5. Unity5的关卡切换

    本文章由cartzhang编写,转载请注明出处. 全部权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/51055584 作者:car ...

  6. RGB中的颜色的设置

    用来表示一个 RGB 颜色值. 语法 RGB(red, green, blue) RGB 函数的语法含有以下这些命名参数: 部分 描述 red 必要参数:Variant (Integer).数值范围从 ...

  7. HDU 1824 Let&#39;s go home (2-SAT判定)

    Let's go home Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  8. Java经常使用日期操作具体解释

    Date类型大多数时间分量计算方法已经被Calendar代替 Date经常用法setTime getTime() new Date();默认获取当前的时间 SimpleDateFormat用来格式化和 ...

  9. jQuery经典面试题及答案精选

    jQuery是一款非常流行的Javascript框架,如果你想要从事Web前端开发这个岗位,那么jQuery是你必须掌握而且能够熟练应用的一门技术.本文整理了一些关于jQuery的经典面试题及答案,分 ...

  10. Oracle imp exp命令具体解释

    怎样在oracle中导入dmp数据库文件? oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令能够把数据从远程数据库server导出到本地的dmp文件,imp命令能够 ...