【递推+矩阵快速幂】【HDU2604】【Queuing】
Queuing
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3032 Accepted Submission(s): 1379

Now we define that ‘f’ is short for female and ‘m’ is short for male. If the queue’s length is L, then there are 2L numbers of queues. For example, if L = 2, then they are ff, mm, fm, mf . If there exists a subqueue as fmf or fff, we call it O-queue
else it is a E-queue.
Your task is to calculate the number of E-queues mod M with length L by writing a program.
3 8
4 7
4 8
6
2
1
FFF FMF
一.找递推公式
考虑最后若直接加M 显然可以成立 所以F[n]=F[n-1]+X
若要在后面加F 考虑N-1是没办法的
考虑N-2 FF MF 依旧没办法
考虑N-3 FFF FMF MMF MFF (FFF,FMF 已经不可能 不考虑)
显然添加MMF 前面N-3无论是什么都不可能会出现FFF,FMF了
所以F[n]=F[n-1]+F[n-3]+X
但是 若添加MFF 可能会出现FMFF
考虑N-4 FMFF MMFF 显然MMFF可以取了
所以 F[n]=F[n-1]+F[n-3]+F[n-4]
二.设计矩阵
注:矩阵十分好设计 第一排即为递推公式的系数
以后几排类似于单位矩阵
三.矩阵快速幂
类似非递归快速幂
node kuaisumi(node A,int N,int mod)
{
node di=e;
while(N>0)
{
if(N&1)
{
di=MatrixMult(di,A,mod);
}
A=MatrixMult(A,A,mod);
N=N>>1;
}
return di;
}
最后代码如下:
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#define oo 0x13131313
using namespace std;
int L,M;
struct node
{
int mat[5][5];
}a,e,ans;
int mat2[5];
void CSH()
{
mat2[1]=9;
mat2[2]=6;
mat2[3]=4;
mat2[4]=2;
for(int i=1;i<=4;i++)
{
e.mat[i][i]=1;
mat2[i]=mat2[i]%M;
}
memset(a.mat,0,sizeof(a.mat));
a.mat[1][1]=a.mat[1][3]=a.mat[1][4]=1;
a.mat[2][1]=a.mat[3][2]=a.mat[4][3]=1;
}
node MatrixMult(node A,node B,int mod)
{
node p;
memset(p.mat,0,sizeof(p.mat));
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
{
for(int k=1;k<=4;k++)
p.mat[i][j]+=A.mat[i][k]*B.mat[k][j];
p.mat[i][j]=p.mat[i][j]%mod;
}
return p;
}
node kuaisumi(node A,int N,int mod)
{
node di=e;
while(N>0)
{
if(N&1)
{
di=MatrixMult(di,A,mod);
}
A=MatrixMult(A,A,mod);
N=N>>1;
}
return di;
}
void solve()
{
int ANS=0;
for(int i=1;i<=4;i++)
{
ANS+=ans.mat[1][i]*mat2[i];
ANS=ANS%M;
}
printf("%d\n",ANS);
}
int main()
{
while(cin>>L>>M)
{
CSH();
if(L>4)
ans=kuaisumi(a,L-4,M);
if(L>4)
solve();
else
printf("%d\n",mat2[L]);
}
return 0;
}
【递推+矩阵快速幂】【HDU2604】【Queuing】的更多相关文章
- hdu 2604 递推 矩阵快速幂
HDU 2604 Queuing (递推+矩阵快速幂) 这位作者讲的不错,可以看看他的 #include <cstdio> #include <iostream> #inclu ...
- HDU 5950 Recursive sequence 【递推+矩阵快速幂】 (2016ACM/ICPC亚洲区沈阳站)
Recursive sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- hdu2604(递推,矩阵快速幂)
题目链接:hdu2604 这题重要的递推公式,找到公式就很easy了(这道题和hdu1757(题解)类似,只是这道题需要自己推公式) 可以直接找规律,推出递推公式,也有另一种找递推公式的方法:(PS: ...
- [hdu 2604] Queuing 递推 矩阵快速幂
Problem Description Queues and Priority Queues are data structures which are known to most computer ...
- HDU 2842 (递推+矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2842 题目大意:棒子上套环.第i个环能拿下的条件是:第i-1个环在棒子上,前i-2个环不在棒子上.每个 ...
- Recursive sequence HDU - 5950 (递推 矩阵快速幂优化)
题目链接 F[1] = a, F[2] = b, F[i] = 2 * F[i-2] + F[i-1] + i ^ 4, (i >= 3) 现在要求F[N] 类似于斐波那契数列的递推式子吧, 但 ...
- HDU6030 Happy Necklace(递推+矩阵快速幂)
传送门:点我 Little Q wants to buy a necklace for his girlfriend. Necklaces are single strings composed of ...
- 五校联考R1 Day1T3 平面图planar(递推 矩阵快速幂)
题目链接 我们可以把棱柱拆成有\(n\)条高的矩形,尝试递推. 在计算的过程中,第\(i\)列(\(i\neq n\))只与\(i-1\)列有关,称\(i-1\)列的上面/下面为左上/左下,第\(i\ ...
- LightOJ 1244 - Tiles 猜递推+矩阵快速幂
http://www.lightoj.com/volume_showproblem.php?problem=1244 题意:给出六种积木,不能旋转,翻转,问填充2XN的格子有几种方法.\(N < ...
随机推荐
- UIScollView Touch事件
customScrollView.h #import <UIKit/UIKit.h> @interface customScrollView : UIScrollView @end cus ...
- HDUJ 1754 I Hate It
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- oracle ORA_ROWSCN 行记录的更新时间
在这介绍两个oracle 10G开始提供的一个伪列ORA_ROWSCN,它又分为两种模式一种是基于block,这是默认的模式,还有一种是基于row上,这种模式只能在建里表时指定ROWDEPENDENC ...
- js执行环境深入研究
js 声明函数是创建函数对象的过程,当创建函数对象时,函数对象的[[scope]] =连当前执行环境对象的作用域(栈顶执行环境--当执行函数时,js会将该函数的执行环境对象入栈) 当为全局函数时,如: ...
- html标签之meta标签
1 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ...
- quick-x 2.2.5 DragonBones 某些fla导出使用后player卡死
1 2 3 4 5 6 7 8 9 10 11 --test 龙骨 self._db = dragonbones.new({ skeleton="game ...
- MVC中的错误过滤器无法拦截URL路径错误的解决办法
“/”应用程序中的服务器错误. 无法找到资源. 说明: HTTP 404.您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用.请检查以下 URL 并确保其拼写正确. 请求 ...
- 【Remoting-4】
[服务对象三种激活方式的不同] [1]客户端激活方式 [A]对象的创建,对象方法的执行都是在远程服务端. [B]服务端为每一个客户端创建其专属的对象,为这个客户提供服务,并且保存状态 [C]可以从远程 ...
- SharePoint 2013 实战碎嘴(ECMAScript客户端对象模型): 提示某个列表不存在
简单情景描述1:(在Sharepoint 2013 Solution 中) 在相应的.aspx页面引入 一下两个.js文件: <script type="text/javascript ...
- 原生化:AnDevCon 2014 McVeigh 的主题演讲
作者:Jeff McVeigh(Intel) 基于(至少部分)NDK的原生安卓应用程序占现在前1000 强的 60% 以上.该增长的原因很简单:开发商需要为用户提供超卓的体验(包括灵敏的反应.与丰富的 ...