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) ...
随机推荐
- 启动VMware环境下的Linux操作系统,添加新分区
启动VMware环境下的Linux操作系统,添加新分区,需要root账号身份. 3.1 [fdisk -l] 最大分区为/dev/sda3,说明新创建的分区将会是sda4 3.2 输入[fdisk / ...
- [Qt Creator 快速入门] 第1章 Qt Creator简介
Qt Creator 是一个跨平台的.完整的 Qt 集成开发环境,其中包括了高级C++代码编辑器.项目和生成管理工具.集成的上下文相关的帮助系统.图形化调试器.代码管理和浏览工具等.这一章先对 Qt ...
- C# 文件操作(摘抄)
——选自<c# 编程兵书>第11章 张志强 胡君 编著 11 文件操作概述 11.1 驱动器 在Windows操作系统中,存储介质统称为驱动器,硬盘由于可以划分为多个区域,每一个区域称为一 ...
- shell set理解
在spark bin下面load-spark-env.sh脚本里,有以下语句: if [ -f "${user_conf_dir}/spark-env.sh" ]; then # ...
- (3)左右值再探与decltype
Decltype 类型指示符 “引用从来都作为其所指对象的同义词出现,只有用在decltype处是一个例外” 理解: Decltype和auto区别: 1. auto是从表达式类型推断出要定义 ...
- Python :用两个栈实现队列
转自:http://blog.csdn.net/Lynette_bb/article/details/75092745 牛客网上的剑指 offer的在线编程: 题目描述 用两个栈来实现一个队列,完成队 ...
- mongo 3.4分片集群系列之八:分片管理
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
- 三维卷积:全景图像Spherical CNNs(Code)
卷积神经网络(CNN)可以很好的处理二维平面图像的问题.然而,对球面图像进行处理需求日益增加.例如,对无人机.机器人.自动驾驶汽车.分子回归问题.全球天气和气候模型的全方位视觉处理问题. 将球形信号的 ...
- react-router 4.x 路由按需加载
react-router 4 代码分割(按需加载) 官方文档 https://serverless-stack.com/chapters/code-splitting-in-create-react ...
- 【转载】appium自动化环境搭建
1.java开发环境JDK 2.android SDK(platform/platform tools/tools/build tools) 3.python下载安装(pip) 4.appium下载安 ...