POJ 3233 Matrix Power Series
来源:互联网 发布:京劳务公司 优化外包 编辑:程序博客网 时间:2024/06/06 09:57
Description
Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak.
【题目分析】
只需要分治一下,从中间分开,然后做logk次快速幂就可以了。详解见代码
【代码】
#include <cstdio>#include <iostream>#include <cstring>using namespace std;typedef struct node{ int b[32][32];}matx;matx a,sa,unit;int n,m,k;matx add(matx a,matx b){ matx c; for (int i=0; i<n; i++) for (int j=0; j<n; j++) { c.b[i][j]=a.b[i][j]+b.b[i][j]; c.b[i][j]%=m; } return c;}matx mul(matx a,matx b){ matx c; for (int i=0; i<n; i++) for (int j=0; j<n; j++) { c.b[i][j]=0; for (k=0; k<n; k++) c.b[i][j]+=a.b[i][k]*b.b[k][j]; c.b[i][j]%=m; } return c;}matx cal(int exp){ matx p,q; p=a; q=unit; while (exp!=1) { if (exp&1) { exp--; q=mul(p,q); } else { exp>>=1; p=mul(p,p); } } return mul(p,q);}matx ms(int k){ if (k==1) return a; matx tmp,tnow; tmp=ms(k/2); if (k&1) //k为奇数时sum(k)=(1+A^(k/2+1))*sum(k/2)+A^(k/2+1); { tnow=cal(k/2+1); tmp=add(tmp,mul(tmp,tnow)); tmp=add(tnow,tmp); } else //k为偶数时sum(k)=(1+A^(k/2))*sum(k/2) { tnow=cal(k/2); tmp=add(tmp,mul(tmp,tnow)); } return tmp;}int main(){ scanf("%d%d%d",&n,&k,&m); for (int i=0; i<n; i++) for (int j=0; j<n; j++) { scanf("%d",&a.b[i][j]); a.b[i][j]%=m; unit.b[i][j]=(i==j); } sa=ms(k); for (int i=0; i<n; i++) { for (int j=0; j<n; j++)printf("%d ",sa.b[i][j]); printf("\n"); } return 0;}
0 0
- POJ 3233 Matrix Power Series
- POJ 3233Matrix Power Series
- poj 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- Poj 3233 Matrix Power Series
- POJ 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- POJ 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- POJ 3233 Matrix Power Series
- poj 3233:Matrix Power Series
- POJ 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- poj 3233 Matrix Power Series
- POJ 3233 Matrix Power Series
- poj3461 Oulipo(KMP)
- 哪些年,一起追过的算法
- unity最佳实践的50技巧
- JDK安装原理
- Winsock使用之客户端和服务器完整代码
- POJ 3233 Matrix Power Series
- 关于python分号报invalidsyntax错误的问题
- php缓存技术之静态缓存
- <hdoj4607>Park Visit
- 安卓,android,高仿真哔哩哔哩动画app客户端,毕业论文+服务器端
- POJ 3974 Palindrome
- Java中的File文件类详解
- c++ primer读书笔记6.1~6.2
- PAT乙级(Basic Level)1021(Java)