题目链接: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又是一道矩阵快速幂模板题的更多相关文章

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

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

  2. hdu 2604 矩阵快速幂模板题

    /* 矩阵快速幂: 第n个人如果是m,有f(n-1)种合法结果 第n个人如果是f,对于第n-1和n-2个人有四种ff,fm,mf,mm其中合法的只有fm和mm 对于ffm第n-3个人只能是m那么有f( ...

  3. 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    ...

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

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

  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. 51 Nod 1242 斐波那契数列的第N项(矩阵快速幂模板题)

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

  9. POJ3070:Fibonacci(矩阵快速幂模板题)

    http://poj.org/problem?id=3070 #include <iostream> #include <string.h> #include <stdl ...

随机推荐

  1. Nginx - rewrite 不区分大小写进行匹配

    Nginx - rewrite 不区分大小写进行匹配 分类: Nginx2014-05-28 19:25 1046人阅读 评论(0) 收藏 举报 Use (?i) to match case-inse ...

  2. Nmap速查手册

    http://drops.wooyun.org/tips/4333 From:http://highon.coffee/docs/nmap/ 0x00:说明 只是一个快速查询手册,理论的东西都没有补充 ...

  3. 0068 Git入门的第一节课

    这是 猴子都懂的Git入门 的学习笔记 Git安装与配置 下载安装Git:http://git-scm.com/ 从开始菜单启动Git Bash $ git --version git version ...

  4. json中把非json格式的字符串转换成json对象再转换成json字符串

    JSON.toJson(str).toString()假如key和value都是整数的时候,先转换成jsonObject对象,再转换成json字符串

  5. 关于HTML5中hash部分API在历史管理,选项卡自动跳转中的一点使用

    在群里最近有人提到如何处理在页面跳转之后,想要直接定位到相对应的选项卡的选项上,比如首页有登录和注册两个按钮,而登录注册页面有一对选项卡分别对应的是登陆和注册,想要实现的功能是点击登陆去到登录页的登录 ...

  6. datagrid鼠标悬浮提示

    /** * 扩展两个方法 */ $.extend($.fn.datagrid.methods, { /** * 开打提示功能 * @param {} jq * @param {} params 提示消 ...

  7. json剥离

    String json=get("http://www.weather.com.cn/data/cityinfo/101010100.html"); JSONObject json ...

  8. trim() 是什么意思?

    这是一个很常见的函数,他的所用是去掉字符序列左边和右边的空格,如字符串str = " ai lafu yo ";str = trim(str); cout << str ...

  9. 关于Unity中的几何体,材质和FBX模型

    一.创建几何体的类型 1: 创建平面 Plane;2: 创建立方体 Cube;3: 创建球体 Sphere;4: 创建胶囊体 Capsule;5: 创建圆柱体 Cylinder;6: 3D文字 3D ...

  10. 【UVa】Salesmen(dp)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...