题目链接: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. MySQL是如何做到安全登陆

    首先Mysql的密码权限存储在mysql.user表中.我们不关注鉴权的部分,我们只关心身份认证,识别身份,后面的权限控制是很简单的事情.在mysql.user表中有个authentication_s ...

  2. visual studio 2013 触发挂起事件

    在 VS2013 中调试 winddows phone 或者 win rt 程序的时候,需要手动触发 “挂起” 事件. 如果找不到这个按钮: 1.打开菜单栏中的 “自定义” 对话框: 2.选择调试位置 ...

  3. 高性能爬虫——asynicio模块

      一 背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,只用一个线程且采用串行的方式执行,那只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调 ...

  4. Mac下Selenium无法最大化Chrome解决方案

    在用Selenium做自动化操作时,一般最大化浏览器的代码都是:driver.manage().window().maximize(), 但是在Mac下这样是无法最大化Chrome浏览器的,解决方法: ...

  5. MySQL 5.7.16 zip包配置

    截止2016/10/16 最新版本Mysql为5.7.16,之前写过一篇APMW搭建的文章(传送门:http://www.cnblogs.com/airoot/p/4131906.html)里面介绍的 ...

  6. mysql 位运算

    & 与运算 |  或运算 ^ 异或运算 或者 你也可以将 与运算理解为 + 法  例如 1|2 = 3   (1+2 = 3)1|2|4 = 7 (1+2+4 = 7) 将 异或运算理解为 - ...

  7. 非常多学ThinkPHP的新手会遇到的问题

    在模板传递变量的时候,非常多视频教程都使用$v.channel的方式.例如以下: <a href="{:U('Chat/set',array('id'=>$v.channel)) ...

  8. Java反射机制在代理模式中的使用

    代理模式的核心思路就是一个接口有两个子类,一个子类完成核心的业务操作,另一个子类完成与核心业务有关的辅助性操作. 代理模式分为静态代理模式和动态代理模式.  静态代理模式: //接口类 interfa ...

  9. Tomcat Ajax跨域访问

    http://ibleave60.blog.51cto.com/2669415/1208652 http://enable-cors.org/server.html 下载cors-filter-1.7 ...

  10. sqlite笔记(akaedu)

    1.创建sql表create table student(id integer primary key, name text, score integer): 2.插入一条记录insert into ...