矩阵快速幂模版

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <cstdio>
#include <cmath>
#define ll long long
using namespace std;
const int MOD = (int) 1e9+7;
struct Matrix {
static const int MAXN = 3;
ll num[MAXN][MAXN], col, row;
void clear() {
memset(num, 0, sizeof(num));
col = row = 0;
}
void unit() {
col = row = 3;
for(int i = 0; i < MAXN; i++) num[i][i] = 1;
}
void build(){
col = row = 3;
num[1][0] = num[2][1] = num[0][2] = num[2][2] = 1;
}
};
Matrix operator * (const Matrix & a, const Matrix & b){
Matrix res;
res.clear();
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
for(int k = 0; k < 3; k++) {
(res.num[i][j] += a.num[i][k] * b.num[k][j]) %= MOD;
}
}
}
return res;
}
Matrix operator ^ (Matrix a, ll k) {
Matrix res;
res.clear(); res.unit();
while(k) {
if(k & 1ll) res = res * a;
a = a * a;
k >>= 1;
}
return res;
}
ll T, n;
int main() {
cin>>T;
while(T--) {
cin>>n;
if(n <= 3) {cout<<1<<endl;continue;}
n -= 3;
Matrix a;
a.clear(); a.build();
a = a ^ n;
ll ans = 0;
for(int i = 0; i < 3; i++) ans += a.num[i][2];
ans %= MOD;
cout<<ans<<endl;
}
return 0;
}

最新文章

  1. Sublime Text 2 快捷操作
  2. csapp2e-chapter2-homework
  3. XCodeo如何去除多余的模拟器---学习笔记七
  4. MapReduce应用案例--单表关联
  5. linux socket 编程(C语言)
  6. 【PHP】PHP中的类与对象
  7. 配置centos防火墙(iptables)开放80端口
  8. 17173php招聘
  9. Android GradientDrawable类的详解,设置activity的背景颜色渐变效果
  10. C++对象模型(三):Program Transformation Semantics (程序转换语义学)
  11. SVN更新的时候前面的子母的意思(A C D M G U R I)
  12. sqlzoo 之 nobel 错题集
  13. linux-IO重定向-文本流重定向
  14. Docker 入门 第三部分: 服务
  15. 《iOS 7 应用开发实战详解》
  16. JS修改当前控件样式&amp;为控件追加事件
  17. Java集合类框架的基本接口有哪些?
  18. 1个比较简单的使用java反射机制获取前台数据进行数据封装的例子
  19. LeetCode: Surrounded Regions 解题报告
  20. 552. Student Attendance Record II

热门文章

  1. SAP Cloud for Customer使用移动设备访问系统的硬件要求
  2. 插值(scipy.interpolate)
  3. Solr笔记(2)_Schema.xml和solrconfig.xml分析
  4. DAG上的动态规划---嵌套矩形(模板题)
  5. CAD交互绘制圆形云线批注(网页版)
  6. PJSIP-iOS源码编译
  7. 利用javascript实现二维数组的筛选
  8. [LUOGU] 2820 局域网
  9. 数据结构( Pyhon 语言描述 ) — — 第7章:栈
  10. fork()函数,一次调用,两次返回