矩阵快速幂

按列递推

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#include <cstring>
#define ll long long
using namespace std;
const int MOD = 10000007;
int n, m;
struct Matrix {
ll num[15][15];
void clear() {
memset(num, 0, sizeof(num));
}
void unit() {
clear();
for(int i = 0; i <= n + 1; i++) num[i][i] = 1;
}
Matrix operator * (const Matrix & b) {
Matrix ans;
ans.clear();
for(int i = 0; i <= n + 1; i++) {
for(int j = 0; j <= n + 1; j++) {
ll tmp = 0ll;
for(int k = 0; k <= n + 1; k++) {
tmp += num[i][k] * b.num[k][j];
}
ans.num[i][j] = tmp % MOD;
}
}
return ans;
}
Matrix operator ^ (ll k) {
Matrix ans, tt = (*this);
ans.unit();
while(k) {
if(k & 1ll) ans = ans * tt;
tt = tt * tt;
k >>= 1;
}
return ans;
}
void print() {
for(int i = 0; i <= n + 1; i ++) {
for(int j = 0; j <= n + 1; j++) {
printf("%lld ", num[i][j]);
}
printf("\n");
}
}
};
int main() {
while(~scanf("%d %d", &n, &m)) {
Matrix a, b;
a.clear(); b.clear();
for(int i = 0; i <= n + 1; i++) {
if(i <= n) a.num[i][0] = 10;
a.num[i][n + 1] = 1;
}
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= i; j++) {
a.num[i][j] = 1;
}
}
b.num[0][0] = 23; b.num[n + 1][0] = 3;
for(int i = 1; i <= n; i++) scanf("%lld", &b.num[i][0]);
b = (a ^ m) * b;
cout << b.num[n][0] << endl;
}
return 0;
}

最新文章

  1. Spark——共享变量
  2. Hibernate和Jpa的关系
  3. LNMP脚本安装
  4. 8.js模式-状态模式
  5. 10g 11g配置Logical Standby
  6. CountDownLatch、CyclicBarrier、Semaphore、Exchanger
  7. java网络编程之UDP通讯
  8. 基础2 JVM
  9. 兼容ie7的导航下拉菜单
  10. 我教女朋友学编程html系列(5) html中table的用法和例子
  11. Myeclipse如何改变编码方式
  12. Centos7安装杀毒软件ClamAV
  13. spring-cloud-hystrix熔断
  14. HTML邮件注意事项
  15. 不同服务器数据库之间的数据操作 sp_addlinkedserver
  16. JavaEE Tutorials (30) - Duke综合案例研究示例
  17. 【Access2007】解救被阉割的truncate
  18. [ZJOI2006]书架(树状数组水过)
  19. C# 操作注册表WindowsRegistry
  20. [数学]MIT牛人解说数学体系

热门文章

  1. 1061: [Noi2008]志愿者招募
  2. C/C++程序基础 (九)排序算法简述
  3. 洛谷 3567/BZOJ 3524 Couriers
  4. 爬虫学习(八)——带cookie的网页进行爬取
  5. OpenFaceswap 入门教程(3): 软件参数篇!
  6. 科学计算库Numpy——运算
  7. vscode运行C/C++程序及配置
  8. BZOJ - 2744 朋友圈 (二分图上的最大团)
  9. IT帮2019年2月线下活动【定义工作,解读自我】之站桩练习
  10. cf984e Elevator