POJ3233:Matrix Power Series
对n<=30(其实可以100)大小的矩阵A求A^1+A^2+……+A^K,K<=1e9,A中的数%m。
从K的二进制位入手。K分解二进制,比如10110,令F[i]=A^1+A^2+……+A^(2^i),那么答案就是F[10000]*A^110+F[100]*A^10+F[10]+A^0。也就是说如果知道F就可以得答案。
F亦可递推,F[i]=F[i-1]*(A^(2^i-1)+A^0)。完美!什么log方,都是假的!
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
//#include<iostream>
using namespace std; int n,K,mod;
#define maxn 111
#define LL long long
typedef LL mat[maxn][maxn];
mat f,a,last,tmp,t,ans,E;
void init(mat &a)
{
memset(a,,sizeof(a));
for (int i=;i<=n;i++) a[i][i]=;
}
void add(mat a,mat b,mat &ans)
{
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
ans[i][j]=(a[i][j]+b[i][j])%mod;
}
void mul(mat a,mat b,mat &ans)
{
mat t;
memset(t,,sizeof(t));
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
for (int k=;k<=n;k++)
t[i][j]=(t[i][j]+a[i][k]*b[k][j]%mod)%mod;
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
ans[i][j]=t[i][j];
}
int main()
{
scanf("%d%d%d",&n,&K,&mod);
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)
scanf("%lld",&a[i][j]),tmp[i][j]=f[i][j]=a[i][j];
init(last);init(E);
memset(ans,,sizeof(ans));
while (K)
{
if (K&)
{
mul(f,last,t);
add(ans,t,ans);
mul(last,tmp,last);
}
add(tmp,E,t);
mul(f,t,f);
mul(tmp,tmp,tmp);
K>>=;
}
for (int i=;i<=n;i++)
{
for (int j=;j<=n;j++)
printf("%lld ",ans[i][j]);
puts("");
}
return ;
}
POJ3233:Matrix Power Series的更多相关文章
- C++题解:Matrix Power Series ——矩阵套矩阵的矩阵加速
Matrix Power Series r时间限制: 1 Sec 内存限制: 512 MB 题目描述 给定矩阵A,求矩阵S=A^1+A^2+--+A^k,输出矩阵,S矩阵中每个元都要模m. 数据范围: ...
- POJ 3233:Matrix Power Series 矩阵快速幂 乘积
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 18450 Accepted: ...
- POJ3233 [C - Matrix Power Series] 矩阵乘法
解题思路 题目里要求\(\sum_{i=1}^kA^i\),我们不妨再加上一个单位矩阵,求\(\sum_{i=0}^kA^i\).然后我们发现这个式子可以写成这样的形式:\(A(A(A...)+E)+ ...
- 【poj3233】 Matrix Power Series
http://poj.org/problem?id=3233 (题目链接) 题意 给出一个n×n的矩阵A,求模m下A+A2+A3+…+Ak 的值 Solution 今日考试就A了这一道题.. 当k为偶 ...
- Matrix Power Series(POJ 3233)
原题如下: Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 28044 Acce ...
- [POJ3233]Matrix Power Series 分治+矩阵
本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia [POJ3233]Matrix Power Series 分治+矩阵 题目大意 A为n×n(n<= ...
- POJ3233 Matrix Power Series 矩阵快速幂 矩阵中的矩阵
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 27277 Accepted: ...
- POJ3233]Matrix Power Series && [HDU1588]Gauss Fibonacci
题目:Matrix Power Series 传送门:http://poj.org/problem?id=3233 分析: 方法一:引用Matrix67大佬的矩阵十题:这道题两次二分,相当经典.首先我 ...
- 线性代数(矩阵乘法):POJ 3233 Matrix Power Series
Matrix Power Series Description Given a n × n matrix A and a positive integer k, find the sum S = ...
随机推荐
- DOCTYPE详解
什么是DTD? SGML引入了文档类型的概念,并由此引入了文档类型定义(Document Type Definition: DTD).文档类型定义 (DTD) 实际上就是一套关于标记符的语法规则,它包 ...
- iOS 自己手动添加编译警告
文/青花瓷的平方(简书作者)原文链接:http://www.jianshu.com/p/b2e30cad2a0d著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 缘由 上一次生产环境我们 ...
- 新时代web组件开发标准
VUE框架,则是遵行了这个标准. 1.html文件 <!DOCTYPE html><html><head lang="en"> <meta ...
- 模板引擎freemarker的使用(二)
freemarker默认配置使用时,如果传到前端的值为null或者不存在,后台会报错. 处理方法: <bean id="freemarkerConfig" class=&qu ...
- ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath
问题: ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the ...
- python关于入参中,传入的是指针还是引用
偶然看到别人的代码,发现有的会传入参数之后,做一次copy,试验一下,关于入参中,传入的是指针还是引用先说自己的结论:1.如果传入的是简单的类型,那么传入应该是引用的数值,2.假如传入的是df这种类型 ...
- bonding的系统初始化介绍
bond0模块的加载 Bonding原理 为方便理解bonding的配置及实现,顺便阐述一下Linux的网络接口及其配置文件.在 Linux 中,所有的网络通讯都发生在软件接口与物理网络设备之间.与网 ...
- HTML中 DOM操作的Document 对象详解(收藏)
Document 对象Document 对象代表整个HTML 文档,可用来访问页面中的所有元素.Document 对象是 Window 对象的一个部分,可通过 window.document 属性来访 ...
- python-水仙花数
>>> for a in range(1,10):... for b in range(0,10):... for c in range(0,10):... x=100*a+10*b ...
- 【2018 CCPC网络赛】1009 - 树
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6446 题目给出的数据为一棵树,dfs扫描每条边,假设去掉某条边,则左边 x 个点,右边 n-x 个点, ...