博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj3233 Matrix Power Series
阅读量:5022 次
发布时间:2019-06-12

本文共 1601 字,大约阅读时间需要 5 分钟。

思路:

递推 + 快速幂优化。

实现:

1 #include 
2 #include
3 using namespace std; 4 5 typedef vector
> matrix; 6 7 matrix multiply(matrix & a, matrix & b, int MOD) 8 { 9 matrix c(a.size(), vector
(b[0].size()));10 for (int i = 0; i < a.size(); i++)11 {12 for (int k = 0; k < a[0].size(); k++)13 {14 for (int j = 0; j < b[0].size(); j++)15 {16 c[i][j] = (c[i][j] + a[i][k] * b[k][j]) % MOD;17 }18 }19 }20 return c;21 }22 23 matrix pow(matrix & a, int n, int m)24 {25 matrix res(a.size(), vector
(a[0].size()));26 for (int i = 0; i < a.size(); i++)27 {28 res[i][i] = 1;29 }30 while (n > 0)31 {32 if (n & 1)33 res = multiply(res, a, m);34 a = multiply(a, a, m);35 n >>= 1;36 }37 return res;38 }39 40 int main()41 {42 int n, k, m;43 cin >> n >> k >> m;44 matrix a(n * 2, vector
(n, 0)), b(n * 2, vector
(n * 2, 0));45 for (int i = 0; i < n; i++)46 {47 for (int j = 0; j < n; j++)48 {49 cin >> b[i][j];50 }51 }52 for (int i = 0; i < n; i++)53 {54 a[i][i] = b[n + i][i] = b[n + i][n + i] = 1;55 }56 matrix b_k = pow(b, k + 1, m);57 matrix ans = multiply(b_k, a, m);58 for (int i = 0; i < n; i++)59 {60 for (int j = 0; j < n; j++)61 {62 int tmp = ans[n + i][j];63 if (i == j) tmp = (tmp - 1 + m) % m;64 cout << tmp << " ";65 }66 cout << endl;67 }68 return 0;69 }

 

转载于:https://www.cnblogs.com/wangyiming/p/9093660.html

你可能感兴趣的文章
『PyTorch』第九弹_前馈网络简化写法
查看>>
纯 CSS 绘制三角形(各种角度)
查看>>
你的袜子还是干的吗?
查看>>
POJ 2001 Shortest Prefixes(字典树)
查看>>
【Silverlight】汉诺塔游戏,带AI
查看>>
BigDecimal的引入和概述
查看>>
Oracle database server architecture
查看>>
StrictMode 详解
查看>>
JS中的几个弹出框用法及注意
查看>>
没忍住,听了rIPPER的,还是入手了个机械的
查看>>
linux rman shell
查看>>
struts2_Action之间的重定向传参
查看>>
网线接法
查看>>
LeetCode--Remove Duplicates from Sorted List
查看>>
(15)JavaScrip 的一些简单笔记
查看>>
右左法则解决复杂声明
查看>>
Jenkins的新建job和配置job
查看>>
三大类加载器 经典例子
查看>>
nohub命令
查看>>
光照问题之常见算法比较(附Python代码)
查看>>