poj3233
来源:互联网 发布:java开源考勤系统 编辑:程序博客网 时间:2024/06/07 02:29
题目链接:
题目大意:
思路:
Sk=A+ASn-1
所以
(A Sk-1)* (E E )=(A Sk)
(0 A)
即(A Sk)=(A A)*(E E)^(n-1)=(A 0)(E E)^(n)
(0 A) (0 A)
既然矩阵递推式出来了,就容易写了,矩阵里套矩阵就是对里面的数组处理时注意下
之前想搞个矩阵套矩阵的模板 搞了半天还不行,还是老老实实的把里面数组开大点,又方便效率又高
#include <cstdio>#include <cstring>#include <cmath>#include <iostream>using namespace std;#define ll long long#define N 150ll mod;ll n,k,m;struct Matrix{ ll r,c; ll m[N][N]; Matrix(){} Matrix(ll r,ll c):r(r),c(c){} Matrix operator *(const Matrix& B)//乘法 { Matrix T(r,B.c); for(int i=1;i<=T.r;i++) { for(int j=1;j<=T.c;j++) { ll tt = 0; for(int k=1;k<=c;k++) tt +=( m[i][k]*B.m[k][j]) % mod; T.m[i][j] = tt % mod; } } return T; }Matrix operator =(const Matrix& B)//复制 { for(int i=1;i<=r;i++) { for(int j=1;j<=c;j++) { m[i][j] = B.m[i][j]; } } } Matrix operator +(const Matrix& B)//加法 { for(int i=1;i<=r;i++) { for(int j=1;j<=c;j++) { m[i][j]+= B.m[i][j]; } } } Matrix Unit(ll h) // 对角线矩阵 { Matrix T(h,h); memset(T.m,0,sizeof(T.m)); for(int i=1;i<=h;i++) T.m[i][i] = 1; return T; } Matrix Pow(ll n) //矩阵幂 { Matrix P = *this,Res = Unit(r); while(n!=0) { if(n&1) Res =Res*P; P = P*P; n >>= 1; } return Res; } void Print()//输出 { for(int i=1;i<=r;i++) { for(int j=1;j<=c;j++) printf("%d ",m[i][j]); printf("\n"); } }}Single;int main(){while(~scanf("%lld%lld%lld",&n,&k,&mod)){Matrix a(2*n,2*n),b(n,2*n);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){if(i==j)a.m[i][j]=1;elsea.m[i][j]=0;}for(int i=1;i<=n;i++)for(int j=n+1;j<=2*n;j++){if(i==j-n)a.m[i][j]=1;elsea.m[i][j]=0;b.m[i][j]=0;}for(int i=1+n;i<=2*n;i++)for(int j=1;j<=n;j++){a.m[i][j]=0;}for(int i=n+1;i<=2*n;i++)for(int j=n+1;j<=2*n;j++){scanf("%lld",&a.m[i][j]);b.m[i-n][j-n]=a.m[i][j];}a=a.Pow(k);b=b*a;for(int i=1;i<=n;i++)for(int j=n+1;j<=2*n;j++){printf("%lld%c",b.m[i][j],j==2*n?'\n':' ');}}return 0;}
阅读全文
0 0
- POJ3233
- poj3233
- poj3233
- POJ3233
- POJ3233
- poj3233
- POJ3233矩阵快速幂
- poj3233 - Matrix Power Series
- POJ3233 Matrix Power Series
- POJ3233 矩阵幂求和
- poj3233——矩阵
- poj3233 Matrix Power Series
- 矩阵快速幂--poj3233
- poj3233-矩阵构造
- POJ3233 Matrix Power Series
- poj3233 hdu 1588 (矩阵)
- 快速矩阵幂POJ3233
- POJ3233解题报告
- Python 函数
- C语言指针2
- Python字符串乘法
- git(十五) git rebase 原理深度剖析
- 《模板的分离编译问题》
- poj3233
- HDU-problem-1754
- Python 元组
- JavaScript_01--------学习笔记
- [POJ
- UVA 101
- LAMP环境搭建
- 编程语言(C语言,JAVA),程序设计,APP开发,算法
- 标准会话管理器——StandardManager