/*
矩阵快速幂:
第n个人如果是m,有f(n-1)种合法结果
第n个人如果是f,对于第n-1和n-2个人有四种ff,fm,mf,mm其中合法的只有fm和mm
对于ffm第n-3个人只能是m那么有f(n-4)种
对于fmm那么对于第n-3个人没有限制有f(n-3)种
顾f(n)=f(n-1)+f(n-3)+f(n-4);
求出前四个结果分别是 a[1]=2;a[2]=4;a[3]=6;a[4]=9;
A=|a[4],a[3],a[2],a[1]|
可以构造矩阵
|1 1 0 0 |
B= |0 0 1 0 |
|1 0 0 1 |
|1 0 0 0 |
|1 1 0 0 |^n
|0 0 1 0 |
|a[4],a[3],a[2],a[1]|* |1 0 0 1 | = |a[5],a[4],a[3],a[2]|
|1 0 0 0 |
A*B^n=C;
直接套模板即可。
*/
#include<stdio.h>
#include<string.h>
#define N 11
int a[N];
struct matrix{
__int64 mat[5][5];
};
matrix matmul(matrix b,matrix c,int mm) {
int i,j,k;
matrix d;
memset(d.mat,0,sizeof(d.mat));
for(i=0;i<4;i++)
for(j=0;j<4;j++)
for(k=0;k<4;k++) {
d.mat[i][j]+=b.mat[i][k]*c.mat[k][j];
d.mat[i][j]%=mm;
}
return d;
}
matrix matpow(matrix f,matrix ff,int k,int m) {
while(k) {
if(k&1)
ff=matmul(ff,f,m);
f=matmul(f,f,m);
k/=2;
}
return ff;
}
int main(){
int n,m;
while(scanf("%d%d",&n,&m)!=EOF) {
a[1]=2;a[2]=4;a[3]=6;a[4]=9;
if(n<=4) {
printf("%d\n",a[n]%m);
continue;
}
matrix aa,bb,cc;
memset(aa.mat,0,sizeof(aa.mat));
memset(bb.mat,0,sizeof(bb.mat));
aa.mat[0][0]=1;//构建矩阵
aa.mat[2][0]=1;
aa.mat[3][0]=1;
aa.mat[0][1]=1;
aa.mat[1][2]=1;
aa.mat[2][3]=1;
bb.mat[0][0]=a[4];
bb.mat[0][1]=a[3];
bb.mat[0][2]=a[2];
bb.mat[0][3]=a[1];
cc=matpow(aa,bb,n-4,m);
printf("%d\n",cc.mat[0][0]);
}
return 0;}

hdu 2604 矩阵快速幂模板题的更多相关文章

  1. luoguP3390(矩阵快速幂模板题)

    链接:https://www.luogu.org/problemnew/show/P3390 题意:矩阵快速幂模板题,思路和快速幂一致,只需提供矩阵的乘法即可. AC代码: #include<c ...

  2. hdu 1575 求一个矩阵的k次幂 再求迹 (矩阵快速幂模板题)

    Problem DescriptionA为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input数据的第一行是一个T,表示有T组数据.每组数据的第一行有 ...

  3. HDU 1575 矩阵快速幂裸题

    题意:中文题 我就不说了吧,... 思路:矩阵快速幂 // by SiriusRen #include <cstdio> #include <cstring> using na ...

  4. Final Destination II -- 矩阵快速幂模板题

    求f[n]=f[n-1]+f[n-2]+f[n-3] 我们知道 f[n] f[n-1] f[n-2]         f[n-1]  f[n-2]  f[n-3]         1    1    ...

  5. POJ3070 斐波那契数列递推 矩阵快速幂模板题

    题目分析: 对于给出的n,求出斐波那契数列第n项的最后4为数,当n很大的时候,普通的递推会超时,这里介绍用矩阵快速幂解决当递推次数很大时的结果,这里矩阵已经给出,直接计算即可 #include< ...

  6. CodeForces 450B (矩阵快速幂模板题+负数取模)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51919 题目大意:斐波那契数列推导.给定前f1,f2,推出指定第N ...

  7. hdu1575 Tr A 矩阵快速幂模板题

    hdu1575   TrA 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575 都不需要构造矩阵,矩阵是题目给的,直接套模板,把对角线上的数相加就好 ...

  8. HDU1757又是一道矩阵快速幂模板题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 按照题目的要求构造矩阵 //Author: xiaowuga //矩阵: //a0 a1 a2 ...

  9. 51 Nod 1242 斐波那契数列的第N项(矩阵快速幂模板题)

    1242 斐波那契数列的第N项  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) ...

随机推荐

  1. P3953 逛公园(dp,最短路)

    P3953 逛公园 题目描述 策策同学特别喜欢逛公园.公园可以看成一张NN个点MM条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,NN号点是公园的出口,每条边有一个非负权值, 代表策策经 ...

  2. PHP的包依赖管理工具Composer简介

    composer是一个基于项目的依赖管理器,负责将php项目的所依赖的包和库安装在项目的目录中,默认不会不会安装任何数据到全局.他用于取代之前pear工具 1 安装Composer curl -sS  ...

  3. 修复mysql的表

    数据损坏原因 MySQL表损坏一般是数据损坏,引起损坏的原因可能是由于磁盘损坏.系统崩溃或者MySQL服务器被崩溃等外部原因.例如有人使用kill -9终止进程,导致MySQL进程未能正常关闭,那么就 ...

  4. 【转】Linux系统编程---dup和dup2详解

    正常的文件描述符: 在linux下,通过open打开以文件后,会返回一个文件描述符,文件描述符会指向一个文件表,文件表中的节点指针会指向节点表.看下图: 打开文件的内核数据结构 dup和dup2两个函 ...

  5. Visual Studio 相关

    基础配置: 背景色:豆沙绿(色调84 饱和度118 亮度205) 字体字号:Consolas 11号  离线下载方法: vs_enterprise.exe --layout c:\vs2017offl ...

  6. 对socket的理解

    要想理解socket,就得先熟悉TCP/IP协议族,TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机如 ...

  7. 关于css宽高问题

    问题:span标签的width和height分别为多少? <!DOCTYPE html> <html> <head> <meta charset=" ...

  8. 拒绝了对对象 'data'(数据库 'xxx',所有者 'dbo')的 SELECT 权限

    拒绝了对对象 'data'(数据库 'xxx',所有者 'dbo')的 SELECT 权限解决的方法:1>在数据库里相应的用户权限中,把db_denydatareader的复选框的勾去掉.很多初 ...

  9. JS高级——Blob处理二进制文件

    https://www.cnblogs.com/hhhyaaon/p/5928152.html

  10. HDU_1072_Nightmare

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1072 题目描述:矩阵表示迷宫,0表示墙,1表示路,2表示起点,3表示终点,4表示重置炸弹时间(6秒),你需 ...