HDU2604
来源:互联网 发布:算法小时代 电子书 编辑:程序博客网 时间:2024/06/16 19:22
转载博客:http://blog.csdn.net/hcbbt/article/details/38363353
HDU 2604 Queuing (矩阵快速幂)
ACM
题目地址:HDU 2604 Queuing
题意:
n个人排队,f表示女,m表示男,包含子串‘fmf’和‘fff’的序列为O队列,否则为E队列,有多少个序列为E队列。
分析:
矩阵快速幂入门题。
下面引用巨巨解释:
用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),递推会跪,可用矩阵快速幂 构造一个矩阵: pic
矩阵快速幂和普通的快速幂原理是一样的,如果不懂可以先去补补快速幂。
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int l,m;struct mat{ long long mm[4][4];};mat operator*(mat a,mat b){ mat c; memset(c.mm,0,sizeof(c.mm)); for(int i=0;i<4;i++) for(int j=0;j<4;j++) for(int k=0;k<4;k++) { c.mm[i][j]+=a.mm[i][k]*b.mm[k][j]; c.mm[i][j]%=m; } return c;}void pow(){ mat res,ans; memset(res.mm,0,sizeof(res.mm)); memset(ans.mm,0,sizeof(ans.mm)); ans.mm[0][0]=9;ans.mm[0][1]=6;ans.mm[0][2]=4;ans.mm[0][3]=2; for(int i=0;i<3;i++) res.mm[i][i+1]=1; for(int i=0;i<4;i++) res.mm[i][0]=1; res.mm[1][0]=0; l-=4; while(l) { if(l%2==1) ans=ans*res; res=res*res; l/=2; } printf("%lld\n",ans.mm[0][0]%m);}int main(){ while(~scanf("%d%d",&l,&m)) { if(l==1) { printf("%d\n",2%m); } else if(l==2) { printf("%d\n",4%m); } else if(l==3) { printf("%d\n",6%m); } else if(l==4) { printf("%d\n",9%m); } else { pow(); } }}
阅读全文
0 0
- HDU2604
- hdu2604 Queuing
- hdu2604-Queuing-矩阵
- hdu2604 矩阵快速幂
- 快速矩阵幂HDU2604
- hdu2604矩阵快速幂
- hdu2604——Queuing
- HDU2604【矩阵快速幂】
- Queuing(hdu2604矩阵二分幂)
- hdu2604之矩阵快速幂
- hdu2604(矩阵快速幂)
- hdu2604---Queuing(AC自动机+矩阵)
- HDU2604 Queuing(矩阵快速幂)
- [矩阵快速幂]hdu2604 Queuing
- hdu2604 queuing(dp+矩阵倍增)
- hdu2604(递推,矩阵快速幂)
- HDU2604-Queuing(递推+矩阵快速幂)
- hdu2604(Trie图的应用)
- Symfony MongoDb 用 FS 存储图片
- 虚拟机CentOS7与主机时间同步
- csdn如何置顶博客
- 大型网站技术架构
- ARM交叉编译工具链
- HDU2604
- werkzeug实现简单Python web框架(3):添加动态路由
- 常见的HTTP状态码
- linux命令:将文件夹内的绝对路径写入txt文件
- Android反编译
- Oracle与JDBC的Group By坑-yellowcong
- WZ安卓面试宝典App
- 用dubbo框架写的简单的接口作为服务端
- kali安装网易云