hdu 2604 矩阵快速幂模板题
/*
矩阵快速幂:
第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 矩阵快速幂模板题的更多相关文章
- luoguP3390(矩阵快速幂模板题)
链接:https://www.luogu.org/problemnew/show/P3390 题意:矩阵快速幂模板题,思路和快速幂一致,只需提供矩阵的乘法即可. AC代码: #include<c ...
- hdu 1575 求一个矩阵的k次幂 再求迹 (矩阵快速幂模板题)
Problem DescriptionA为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input数据的第一行是一个T,表示有T组数据.每组数据的第一行有 ...
- HDU 1575 矩阵快速幂裸题
题意:中文题 我就不说了吧,... 思路:矩阵快速幂 // by SiriusRen #include <cstdio> #include <cstring> using na ...
- 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 ...
- POJ3070 斐波那契数列递推 矩阵快速幂模板题
题目分析: 对于给出的n,求出斐波那契数列第n项的最后4为数,当n很大的时候,普通的递推会超时,这里介绍用矩阵快速幂解决当递推次数很大时的结果,这里矩阵已经给出,直接计算即可 #include< ...
- CodeForces 450B (矩阵快速幂模板题+负数取模)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51919 题目大意:斐波那契数列推导.给定前f1,f2,推出指定第N ...
- hdu1575 Tr A 矩阵快速幂模板题
hdu1575 TrA 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575 都不需要构造矩阵,矩阵是题目给的,直接套模板,把对角线上的数相加就好 ...
- HDU1757又是一道矩阵快速幂模板题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 按照题目的要求构造矩阵 //Author: xiaowuga //矩阵: //a0 a1 a2 ...
- 51 Nod 1242 斐波那契数列的第N项(矩阵快速幂模板题)
1242 斐波那契数列的第N项 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) ...
随机推荐
- CentOS 6.5克隆后eth1与eth0的问题
CentOS 6.5克隆后eth1与eth0的问题 按照安装文档执行以下步骤时: 从克隆出来的虚拟机网卡都会被命名为eth1,而有些程序或者脚本,涉及到网卡的,默认写的是eth0,这时就存在要 ...
- iOS静态库.Framework制作
首先要解释一下什么是库,库(Library)其实就是一段编译好的二进制代码,加上头文件就可以供别人使用,一般会有两种情况要用到库: 某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式 ...
- UnicodeEncodeError: ‘ascii’ codec can’t encode character u’\u8888′ in position 0: ordinal not in range(168)
python保存文件UnicodeEncodeError以及reload(sys)后print失效问题 在将字符串写入文件时,执行f.write(str),后台总是报错:UnicodeEncodeEr ...
- 莫队算法 Gym - 100496D Data Mining
题目传送门 /* 题意:从i开始,之前出现过的就是之前的值,否则递增,问第p个数字是多少 莫队算法:先把a[i+p-1]等效到最前方没有它的a[j],问题转变为求[l, r]上不重复数字有几个,裸莫队 ...
- 【SpringMVC框架】非注解的处理器映射器和适配器
参考来源: http://blog.csdn.net/acmman/article/details/46968939 处理器映射器就是根据URL来找Handler,处理器适配器就是按照它要求的 ...
- Shell脚本,简单& 强大
摘自<码农增刊Linus与Linux>,章节:你可能不知道的Shell. 最近阅读完这本书,觉得其中有很多不错的内容,这是其中的一个Shell小甜点,拿来和大家一起分享一下,增加了 ...
- Mybatis的Dao向mapper传多个参数(三种解决方案)转自《super超人》
第一种方案 : DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xml <select id=" ...
- Kerberos 简介——教你做个好人
文章导读: 对称加密 非对称加密 数字证书 Kerberos认证流程 Hadoop生态利用Kerberos认证机制来识别可靠的服务和节点,保障Hadoop集群的安全,那么Kerberos到底是什么?为 ...
- 安装linux mint 18.3 后要做的
使用u盘安装的linux mint 18.3,安装过程基本顺利 发现在安装过程中使用中文语言的话会使得下载附加软件的速度快很多 安装完成之后要做的事情有: 1.字体 默认的楷体字比较难看,在软件管理器 ...
- 继承static的注意点
继承static的注意点 singleton模式会使用 <?php class Auth { protected static $_instance = null; /** * 单用例入口 * ...