【矩阵快速幂+二分】Matrix Power Series POJ
来源:互联网 发布:金知元 知乎 编辑:程序博客网 时间:2024/06/08 14:36
Think:
1知识点:矩阵快速幂+二分求解等比矩阵前n项和
2题意:输入一个矩阵,求解矩阵前n项和(S = A^1 + A^2 + A^3 + … + A^k.),模mod
vjudge题目链接
以下为Accepted代码
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 40;typedef struct Matrax{ int m[N][N];}matrax;matrax e, per;int n, m, mod;void read();/*读取矩阵+初始化单位矩阵*/matrax Add(matrax a, matrax b);/*矩阵加法*/matrax multi(matrax a, matrax b);/*矩阵乘法*/matrax power(int k);/*矩阵快速幂*/matrax matrax_sum(int k);/*等比矩阵前n项和*/void Pri(matrax ans);/*输出矩阵*/int main(){ while(~scanf("%d %d %d", &n, &m, &mod)){ read(); matrax ans = matrax_sum(m); Pri(ans); } return 0;}void read(){/*读取矩阵+初始化单位矩阵*/ for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ scanf("%d", &e.m[i][j]); e.m[i][j] %= mod; per.m[i][j] = (i == j); } }}matrax Add(matrax a, matrax b){/*矩阵加法*/ matrax c; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ c.m[i][j] = (a.m[i][j] + b.m[i][j])%mod; } } return c;}matrax multi(matrax a, matrax b){/*矩阵乘法*/ matrax c; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ c.m[i][j] = 0; for(int k = 0; k < n; k++){ c.m[i][j] += (a.m[i][k] * b.m[k][j])%mod; } c.m[i][j] %= mod; } } return c;}matrax power(int k){/*矩阵快速幂*/ matrax p, ans = per; p = e; while(k){ if(k & 1) ans = multi(ans, p); p = multi(p, p); k >>= 1; } return ans;}matrax matrax_sum(int k){/*等比矩阵前n项和*/ if(k == 1) return e; matrax tmp, b; tmp = matrax_sum(k>>1); if(k & 1){ b = power((k>>1)+1); tmp = Add(tmp, multi(b, tmp)); tmp = Add(tmp, b); } else { b = power(k>>1); tmp = Add(tmp, multi(b, tmp)); } return tmp;}void Pri(matrax ans){/*输出矩阵*/ for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ printf("%d%c", ans.m[i][j], j == n-1? '\n': ' '); } }}
阅读全文
1 0
- poj 3233 Matrix Power Series 矩阵 快速幂 两次二分
- POJ 3233 Matrix Power Series(矩阵快速幂+二分求和)
- POJ 3233 Matrix Power Series 矩阵快速幂+二分
- POJ 3233 Matrix Power Series 矩阵快速幂+二分
- POJ - Matrix Power Series 【矩阵快速幂+二分求和】
- POJ 3233 Matrix Power Series (矩阵快速幂 + 二分)
- POJ 3233 Matrix Power Series(矩阵快速幂+二分)
- poj 3233 Matrix Power Series(矩阵二分,快速幂)
- POJ Matrix Power Series (矩阵快速幂+二分)
- POJ 3233 Matrix Power Series (矩阵快速幂+二分)
- poj 1995 Matrix Power Series 二分+矩阵快速幂
- 【矩阵快速幂+二分】Matrix Power Series POJ
- poj 3233 Matrix Power Series 矩阵快速幂or二分
- poj Matrix Power Series (矩阵快速幂)
- POJ 3233-Matrix Power Series(矩阵快速幂+二分求矩阵和)
- poj 3233 --- Matrix Power Series (二分,矩阵)
- POJ 3233 Matrix Power Series (矩阵 + 二分)
- POJ 3233 Matrix Power Series(矩阵+二分)
- 第十七天总结
- Android studio设置(1)
- Understanding Subjects in RxJS
- 闭关一年的干货与朋友们分享 先预告一下
- 赚积分
- 【矩阵快速幂+二分】Matrix Power Series POJ
- LeetCode刷题(C++)——Course Schedule II
- HDU 5934 && 2016CCPC杭州 B: Bomb(Trajan强连通)
- 【文献阅读】ResNet-Deep Residual Learning for Image Recognition--CVPR--2016
- Codeforces 385C Bear and Prime Numbers(数论)
- Hash表查找成功和查找不成功的平均查找长度
- Django 重置密码 发送邮件
- centos7配置php运行环境(Apache、mysql)
- C语言之获取32字节随机数的字符串