HDU1757又是一道矩阵快速幂模板题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757
按照题目的要求构造矩阵
//Author: xiaowuga
//矩阵:
//a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 9
// 1 0 0 0 0 0 0 0 0 0 8
// 0 1 0 0 0 0 0 0 0 0 7
// 0 0 1 0 0 0 0 0 0 0 6
// 0 0 0 1 0 0 0 0 0 0 5
// 0 0 0 0 1 0 0 0 0 0 4
// 0 0 0 0 0 1 0 0 0 0 3
// 0 0 0 0 0 0 1 0 0 0 2
// 0 0 0 0 0 0 0 1 0 0 1
// 0 0 0 0 0 0 0 0 1 0 0
#include <bits/stdc++.h>
#define maxx INT_MAX
#define minn INT_MIN
#define inf 0x3f3f3f3f
#define N 10
using namespace std;
typedef long long ll;
int k,MOD;
int arr[N],f[N];
struct Matrix{
ll mat[N][N];
//重定向乘法
Matrix operator*(const Matrix &m)const{
Matrix tmp;
for(int i=;i<N;i++)
for(int j=;j<N;j++){
tmp.mat[i][j]=;
for(int k=;k<N;k++){
tmp.mat[i][j]+=mat[i][k]*m.mat[k][j]%MOD;
tmp.mat[i][j]%=MOD;
}
}
return tmp;
}
};
ll POW(Matrix &m,int k){
Matrix ans;
memset(ans.mat,,sizeof(ans.mat));
for(int i=;i<N;i++) ans.mat[i][i]=;
k-=;
while(k){
if(k&) ans=ans*m;
k/=;
m=m*m;
}
ll sum=;
for(int i=;i<N;i++){
sum+=ans.mat[][i]*f[N-i-]%MOD;
sum%=MOD;
}
return sum;
}
void init(Matrix &m){
memset(m.mat,,sizeof(m.mat));
for(int i=;i<N;i++) m.mat[][i]=arr[i];
for(int i=;i<N-;i++) m.mat[i+][i]=;
for(int i=;i<N;i++) f[i]=i;
}
int main() {
ios::sync_with_stdio(false);cin.tie();
Matrix m;
while(cin>>k>>MOD){
for(int i=;i<N;i++) cin>>arr[i];
init(m);
if(k<) cout<<k%MOD<<endl;
else cout<<POW(m,k)<<endl;
}
return ;
}
HDU1757又是一道矩阵快速幂模板题的更多相关文章
- 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( ...
- 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 ...
- 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 ...
随机推荐
- 使用 firewalld 构建 Linux 动态防火墙
firewalld 是新一 Linux 代防火墙工具,它提供了支持网络 / 防火墙区域 (zone) 定义网络链接以及接口安全等级的动态防火墙管理工具.它也支持允许服务或者应用程序直接添加防火墙规则的 ...
- lua获取喜马拉雅音频地址
参考此文http://blog.csdn.net/zjg555543/article/details/39177971 在Linux下可以直接运行 #!/usr/bin/lua5. --需要luacu ...
- hdu6153 扩展kmp求一个字符串的后缀在另一个字符串出现的次数。
/** 题目:hdu6153 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6153 题意:给定两个串,求其中一个串t的每个后缀在另一个串s中出现的次数乘以 ...
- 二分图匹配 + 最小点覆盖 - Vertex Cover
Vertex Cover Problem's Link Mean: 给你一个无向图,让你给图中的结点染色,使得:每条边的两个顶点至少有一个顶点被染色.求最少的染色顶点数. analyse: 裸的最小点 ...
- 关于Nvelocity的主要语法和一些代码示例
context.Response.ContentType = "text/html"; VelocityEngine vltEngine = new VelocityEngine( ...
- [android] AndroidManifest.xml -【manifest】
<manifest> 原文链接:http://www.android-doc.com/guide/topics/manifest/manifest-element.html 最早引入的AP ...
- 【转】【Linux】Linux 下zip包的压缩与解压
linux zip 命令详解 功能说明:压缩文件. 语 法:zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目录>][-ll][-n <字尾字符串& ...
- final可以修饰类、属性、方法
final可以修饰类.属性.方法. 当用final修饰类的时候,此类不可被继承,即final类没有子类.这样可以用final保证用户调用时动作的一致性,可以防止子类覆盖情况的发生. 当利用final修 ...
- Linux kernel parameter command line设置
现在CPU2核以上比较普遍了,平时用linux上上网可能用不着双核甚至4核,大部分发行版内核都启用了CPU_HOTPLUG,到/sys/devices/system/cpu下可以看到文件夹cpu0.c ...
- UIView 坐标转换
例子1 Controller的view中有一个tableView,tableView的cell上有一个button,现在需要将button的frame转为在Controller的view中的frame ...