POJ3233 Matrix Power Series(矩阵快速幂+分治)
Description
Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak.
Input
The input contains exactly one test case. The first line of input contains three positive integers n (n ≤ 30), k (k ≤ 109) and m (m < 104). Then follow n lines each containing n nonnegative integers below 32,768, giving A’s elements in row-major order.
Output
Output the elements of S modulo m in the same way as A is given.
Sample Input
2 2 4
0 1
1 1
Sample Output
1 2
2 3
题意:给你一个矩阵A,且已知S = A + A^2 + A^3 +...+ A^k,求S
题解:假设有A + A^2 + A^3 +...+ A^n
那么如果n为偶数,该式子可以写为
(I+A^(N/2))*(A+A^2+...+A^(N/2))
如果n为奇数,则可以拆成一个矩阵A^n和n为偶数的另一串式子。
于是就可以分治了,1700ms莫名慌
学到了如何memset结构体里的数组,还是有收获的。
代码如下:
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; struct matrix
{
int a[][];
matrix()
{
memset(a,,sizeof(a));
}
}; int n,k,m; void print(matrix &ans)
{
for(int i=; i<=n; i++)
{
for(int j=; j<=n-; j++)
{
printf("%d ",ans.a[i][j]);
}
printf("%d\n",ans.a[i][n]);
}
} matrix add(matrix a,matrix b)
{
matrix c;
for(int i=; i<=n; i++)
{
for(int j=; j<=n; j++)
{
c.a[i][j]=a.a[i][j]+b.a[i][j];
if(c.a[i][j]>=m)
{
c.a[i][j]%=m;
}
}
}
return c;
} matrix mul(matrix a,matrix b)
{
matrix c;
for(int i=; i<=n; i++)
{
for(int j=; j<=n; j++)
{
for(int k=; k<=n; k++)
{
c.a[i][j]+=a.a[i][k]*b.a[k][j];
if(c.a[i][j]>=m)
{
c.a[i][j]%=m;
}
}
}
}
return c;
} matrix kasumi(matrix a,int b)
{
matrix ans;
for(int i=; i<=n; i++)
{
ans.a[i][i]=;
}
if(b==)
{
return ans;
}
if(b==)
{
return a;
}
while(b)
{
if(b&)
{
ans=mul(ans,a);
}
a=mul(a,a);
b>>=;
}
return ans;
} matrix solve(matrix a,int k)
{
if(k==)
{
return a;
}
if(k&)
{
return add(solve(a,k-),kasumi(a,k));
}
else
{
return mul(add(kasumi(a,),kasumi(a,k>>)),solve(a,k>>));
}
} int main()
{
scanf("%d%d%d",&n,&k,&m);
matrix a,ans;
for(int i=; i<=n; i++)
{
for(int j=; j<=n; j++)
{
scanf("%d",&a.a[i][j]);
}
}
ans=solve(a,k);
print(ans);
}
POJ3233 Matrix Power Series(矩阵快速幂+分治)的更多相关文章
- POJ3233:Matrix Power Series(矩阵快速幂+二分)
http://poj.org/problem?id=3233 题目大意:给定矩阵A,求A + A^2 + A^3 + … + A^k的结果(两个矩阵相加就是对应位置分别相加).输出的数据mod m.k ...
- POJ3233 Matrix Power Series 矩阵快速幂 矩阵中的矩阵
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 27277 Accepted: ...
- POJ3233:Matrix Power Series(矩阵快速幂+递推式)
传送门 题意 给出n,m,k,求 \[\sum_{i=1}^kA^i\] A是矩阵 分析 我们首先会想到等比公式,然后得到这样一个式子: \[\frac{A^{k+1}-E}{A-E}\] 发现要用矩 ...
- POJ 3233:Matrix Power Series 矩阵快速幂 乘积
Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 18450 Accepted: ...
- 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] ...
- POJ 3233 Matrix Power Series 矩阵快速幂+二分求和
矩阵快速幂,请参照模板 http://www.cnblogs.com/pach/p/5978475.html 直接sum=A+A2+A3...+Ak这样累加肯定会超时,但是 sum=A+A2+...+ ...
- POJ3233 Matrix Power Series(快速幂求等比矩阵和)
题面 \(solution:\) 首先,如果题目只要我们求\(A^K\) 那这一题我们可以直接模版矩乘快速幂来做,但是它现在让我们求$\sum_{i=1}^{k}{(A^i)} $ 所以我们思考一下这 ...
- 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 ...
- POJ3233Matrix Power Series(矩阵快速幂)
题意 题目链接 给出$n \times n$的矩阵$A$,求$\sum_{i = 1}^k A^i $,每个元素对$m$取模 Sol 考虑直接分治 当$k$为奇数时 $\sum_{i = 1}^k A ...
随机推荐
- ROS探索总结(三)——ROS新手教程
转自古-月 http://blog.csdn.net/hcx25909 前面我们介绍了ROS的特点和结构,接下来就要开始准备动手感受一下ROS的强大了. ROS官网的wiki上针对新手的教程很详细,最 ...
- sqldeveloper和plsqldebeloper
sqldeveloper : 支持不用tns连,支持jdbc直接连的. plsqldebeloper : 必须使用tns连, 如果oracle安装在本机,本机已经有tns文件,和oci.dll,只需在 ...
- 地下迷宫探索(dfs)
地下迷宫探索(30 分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活的同时 ...
- Oracle 11g r2 rac +openfiler 2.99 安装
1 openfiler 2.99 安装 在官网下载iso文件,这里选择openfileresa-2.99.1-x86_64-disc1.iso 版本,在vbox下创建一个虚拟机 --vbox 选择li ...
- C# winform中PictureBox控件的SizeMode模式
SizeMode属性有五种模式, Normal →标准模式, 在此模式下, 图片位于PictureBox的左上角, 图片的大小由PictureBox控件的大小决定, 当图片的大小大于PictureBo ...
- sysfs文件系统
3 sysfs文件系统 sysfs是一个基于内存的文件系统,它的作用是将内核信息以文件的方式提供给用户程序使用.该文件系统的目录层次结构严格按照内核的数据结构组织.除了二进制文件外(只有特殊场合才使用 ...
- Java Web发布
记得开始学习Java Web的时候,首先用的是Eclipse开发,但是有一个问题始终没有弄明白,做好的Web项目是如何发布到Tomcat服务器上的呢?最后得到了一个结论,那就是Eclipse这个软件可 ...
- SQL Server 2008怎么自动备份数据库
在SQL Server 2008数据库中.为了防止数据的丢失我们就需要按时的来备份数据库了.要是每天都要备份的话,人工备份会很麻烦的,自动备份的话就不需要那么麻烦了,只 要设置好了,数据库就会自动在你 ...
- 【phonegap】下载文件
<!-- 打包的时候phonegap自己会添加这个文件--> <script type="text/javascript" charset="utf-8 ...
- Oracle T4-2用jumpstart方式安装Solaris10
在安装过程中遇到了2个问题 1) 安装时无法识别硬RAID磁盘 T4-2的2块本地盘做了硬RAID,用jumpstart安装时无法识别硬RAID磁盘,报错信息如下: {0} ok boot net - ...