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 0
0 0 0 = 0 0 0 * 1 0 1
0 0 0 0 0 0 1 0 0
矩阵快速幂就是利用快速幂的思路,去加速转移矩阵的计算,从而给计算带来方便
#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
#define LL long long
using namespace std;
const LL mod = 1e9+;
struct M
{
LL a[][];
void init()
{
memset(a, , sizeof(a));
a[][]=;
a[][]=;
a[][]=;
}
void init0(){
memset(a, , sizeof(a));
}
};
M mul (M a,M b)
{
M ans;
for (int i=; i<; i++)
{
for (int j=; j<; j++)
{
ans.a[i][j]=;
for (int k=; k<; k++)
{
ans.a[i][j]+=a.a[i][k]*b.a[k][j];
ans.a[i][j]%=mod;
}
}
}
return ans;
}
M qpow(M a,LL n)
{
M ans;
ans.init();
while(n)
{
if (n&)ans=mul(ans,a);
a=mul(a,a);
n/=;
}
return ans;
}
void output(M a)
{
for(int i=; i<; ++i)
{
for(int j=; j<; ++j)
{
cout << a.a[i][j] << " ";
}
cout << endl;
}
}
int main()
{
int n;
int t;
int num=;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
num++;
M a,b;
a.a[][]=;
a.a[][]=;
a.a[][]=;
a.a[][]=;
a.a[][]=;
a.a[][]=;
a.a[][]=;
a.a[][]=;
a.a[][]=;
// output(a);
M k=qpow(a,n);
// output(a);
// cout<<endl;
printf("Case %d:\n",num);
printf("%lld\n",k.a[][]);
}
return ;
}
Final Destination II -- 矩阵快速幂模板题的更多相关文章
- luoguP3390(矩阵快速幂模板题)
链接:https://www.luogu.org/problemnew/show/P3390 题意:矩阵快速幂模板题,思路和快速幂一致,只需提供矩阵的乘法即可. AC代码: #include<c ...
- hdu 2604 矩阵快速幂模板题
/* 矩阵快速幂: 第n个人如果是m,有f(n-1)种合法结果 第n个人如果是f,对于第n-1和n-2个人有四种ff,fm,mf,mm其中合法的只有fm和mm 对于ffm第n-3个人只能是m那么有f( ...
- hdu 1575 求一个矩阵的k次幂 再求迹 (矩阵快速幂模板题)
Problem DescriptionA为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input数据的第一行是一个T,表示有T组数据.每组数据的第一行有 ...
- 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 都不需要构造矩阵,矩阵是题目给的,直接套模板,把对角线上的数相加就好 ...
- 51 Nod 1242 斐波那契数列的第N项(矩阵快速幂模板题)
1242 斐波那契数列的第N项 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) ...
- POJ3070:Fibonacci(矩阵快速幂模板题)
http://poj.org/problem?id=3070 #include <iostream> #include <string.h> #include <stdl ...
- HDU1757又是一道矩阵快速幂模板题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 按照题目的要求构造矩阵 //Author: xiaowuga //矩阵: //a0 a1 a2 ...
随机推荐
- 剑指offer(java版)【转】
面试题 2 :实现单例模式 1. 饿汉式单例类 public class SingletonClass { private static final SingletonClass instance=n ...
- Oracle EBS compile PLD PLL files.
PLL->PLX:frmcmp_batch module_type=library userid=apps/apps module=$1.pll output_file=$1.plx compi ...
- SqlServer-RBAC五表权限
这只是一个精简的SqlServer-RBAC五表权限,根据自身需求修改即可 --创建数据库-权限CREATE DATABASE RBACGOUSE RBACGO --1.权限表CREATE TABLE ...
- android调试工具adb命令大全
转载: 一.adb介绍SDK的Tools文件夹下包含着Android模拟器操作的重要命令adb,adb的全称为(Android Debug Bridge就是调试桥的作用.通过adb我们可以在Eclip ...
- Git Extensions 使用小结
1.查看仓库 2.创建分支 然后会自动创建一个 Commit ,推送到远端分支即可. 3.合并分支 注意1.自动提交需要没有无法自动合并的冲突才行. 注意2.快进线指的是将别人的提交原封不动附加到自己 ...
- 简单理解Vue中的nextTick
Vue中的nextTick涉及到Vue中DOM的异步更新,感觉很有意思,特意了解了一下.其中关于nextTick的源码涉及到不少知识,很多不太理解,暂且根据自己的一些感悟介绍下nextTick. 一. ...
- rem自适应
//REM自适应 _resize(); window.addEventListener('resize', _resize, false); function _resize() { var devi ...
- python脚本后台启动
nohup python -u test.py > out.log 2>&1 & nohup python -u 文件路径 > 打印日志 2>&1 &a ...
- CCF-201803-3-URL映射(模拟)
Problem CCF-201803-3-URL映射 Time Limit: 1000 mSec Problem Description URL 映射是诸如 Django.Ruby on Rails ...
- DataGrid获取单元格的值
string str = (dataGrid.Columns[0].GetCellContent(dataGrid.Items[0]) as TextBlock).Text;