题目要求的是 A+A2+...+Ak,而不是单个矩阵的幂。

  那么可以构造一个分块的辅助矩阵 S,其中 A 为原矩阵,E 为单位矩阵,O 为0矩阵   

  将 S 取幂,会发现一个特性:

  Sk +1右上角那一块不正是我们要求的 A+A2+...+Ak

  于是构造出 S 矩阵,然后对它求矩阵快速幂即可,最后别忘了减去一个单位阵。

  时间降为O(n3log2k)

PS.减去单位矩阵的过程中要防止该位置小于零。

 #include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 65
using namespace std;
struct mat{
long long a[maxn][maxn];
};
mat res,c;
int n,k,m;
mat mat_mul(mat &x,mat &y,int Mod){
mat ans;
memset(ans.a,,sizeof(ans.a));
for (int i=;i<*n;i++)
for (int j=;j<*n;j++)
for (int kk=;kk<*n;kk++){
ans.a[i][j]+=x.a[i][kk]*y.a[kk][j];
ans.a[i][j]%=Mod;
}
return ans;
}
void mat_pow(mat &res,int k,int Mod){
mat c=res;
k--;
while (k){
if (k&) res=mat_mul(res,c,m);
k>>=;
c=mat_mul(c,c,m);
}
}
int main(){
cin >> n >> k >> m;
memset(res.a,,sizeof(res.a));
for (int i=;i<n;i++){
for (int j=;j<n;j++){
cin >> res.a[i][j];
}
res.a[i][i+n]=res.a[i+n][i+n]=;
}
mat_pow(res,k+,m); //求出res的k+1次方
for (int i=;i<n;i++){
res.a[i][i+n]--;
while (res.a[i][i+n]<) res.a[i][i+n]+=m;
}
for (int i=;i<n;i++){
for (int j=;j<n-;j++){
cout << res.a[i][j+n] << " ";
}
cout << res.a[i][*n-] << endl;
}
return ;
}

poj3233 Matrix Power Series(矩阵快速幂)的更多相关文章

  1. POJ3233:Matrix Power Series(矩阵快速幂+二分)

    http://poj.org/problem?id=3233 题目大意:给定矩阵A,求A + A^2 + A^3 + … + A^k的结果(两个矩阵相加就是对应位置分别相加).输出的数据mod m.k ...

  2. POJ3233 Matrix Power Series 矩阵快速幂 矩阵中的矩阵

    Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 27277   Accepted:  ...

  3. POJ3233:Matrix Power Series(矩阵快速幂+递推式)

    传送门 题意 给出n,m,k,求 \[\sum_{i=1}^kA^i\] A是矩阵 分析 我们首先会想到等比公式,然后得到这样一个式子: \[\frac{A^{k+1}-E}{A-E}\] 发现要用矩 ...

  4. POJ3233 Matrix Power Series(矩阵快速幂+分治)

    Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak. ...

  5. POJ 3233:Matrix Power Series 矩阵快速幂 乘积

    Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 18450   Accepted:  ...

  6. POJ 3233 Matrix Power Series 矩阵快速幂

    设S[k] = A + A^2 +````+A^k. 设矩阵T = A[1] 0 E E 这里的E为n*n单位方阵,0为n*n方阵 令A[k] = A ^ k 矩阵B[k] = A[k+1] S[k] ...

  7. POJ 3233 Matrix Power Series 矩阵快速幂+二分求和

    矩阵快速幂,请参照模板 http://www.cnblogs.com/pach/p/5978475.html 直接sum=A+A2+A3...+Ak这样累加肯定会超时,但是 sum=A+A2+...+ ...

  8. POJ3233 Matrix Power Series(快速幂求等比矩阵和)

    题面 \(solution:\) 首先,如果题目只要我们求\(A^K\) 那这一题我们可以直接模版矩乘快速幂来做,但是它现在让我们求$\sum_{i=1}^{k}{(A^i)} $ 所以我们思考一下这 ...

  9. POJ-3233 Matrix Power Series 矩阵A^1+A^2+A^3...求和转化

    S(k)=A^1+A^2...+A^k. 保利求解就超时了,我们考虑一下当k为偶数的情况,A^1+A^2+A^3+A^4...+A^k,取其中前一半A^1+A^2...A^k/2,后一半提取公共矩阵A ...

  10. POJ3233Matrix Power Series(矩阵快速幂)

    题意 题目链接 给出$n \times n$的矩阵$A$,求$\sum_{i = 1}^k A^i $,每个元素对$m$取模 Sol 考虑直接分治 当$k$为奇数时 $\sum_{i = 1}^k A ...

随机推荐

  1. 80% UI 初学者走过的弯路,你走了几条?

    关于UI 对于初学UI设计的人而言,可能对UI具体是做什么,或者自己是否能顺利转行胜任这样的岗位存在一定的顾虑,今天我们就来重点说说UI是做什么的,以及学UI到有哪些需要避免的弯路. 1.UI设计是做 ...

  2. 一款APP的交互文档从撰写到交付

    我第一份工作的设计总监是前百度设计师,34岁,一线设计12年:今年聊天说转了产品总监,如今39岁还活跃在行业中…… 我第二份工作的部门总监是前腾讯工程师,38岁,一线开发14年:2年前在Q群里跟我们说 ...

  3. toArray()

  4. vs不同

    写了很多却错误关闭,无语,直接上内容,因为在公司年限长和德国.波兰.英国公司都有合作,而且他们的开发工具各不相同,因此我电脑上有Visual Studio 2008,Visual Studio 201 ...

  5. 调用数据库--stone

    from Mysql_operate_class import mysql def saveMysqlData(sql, dbname="algorithm"): pym = my ...

  6. kubernetes pod、service文件yaml模版格式

    apiVersion: v1 #必选,版本号,例如v1,版本号必须可以用 kubectl api-versions 查询到 . kind: Pod #必选,Pod metadata: #必选,元数据 ...

  7. 2018.08.22 codves2370 小机房的树(lca+树上差分)

    传送门 一道板子题. 直接树链剖分维护树上lca然后差分就行了. 代码: #include<bits/stdc++.h> #define N 50005 #define lc (p< ...

  8. Part 3 - Advanced Concepts(11-13)

    https://simpleisbetterthancomplex.com/series/2017/09/18/a-complete-beginners-guide-to-django-part-3. ...

  9. Django入门与实践-第25章:Markdown 支持(完结)

    http://127.0.0.1:8000/boards/1/topics/102/reply/ 让我们在文本区域添加 Markdown 支持来改善用户体验. 你会看到要实现这个功能非常简单. 首先, ...

  10. Linux将程序添加到服务的方法(通用)

    一:咱们通过这篇文章来演示怎么将某个程序作为服务(就类似Windows服务可以开机自动启动),这里以tomcat为例,已经亲测过: 二:步骤(最好用root用户来做这种事情,切换root用户记得su ...