http://poj.org/problem?id=3233

挺有意思的..学习到结构体作为变量的转移,
题意 : 给定矩阵A,求A + A^2 + A^3 + ... + A^k的结果(两个矩阵相加就是对应位置分别相加)。输出的数据mod m。k<=10^9。
代码:
 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int maxn=;
const double eps=1e-;
int n,m;
struct mat{
int e[][];
};
mat plu(mat x,mat y){//相加
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
x.e[i][j]+=y.e[i][j];
x.e[i][j]%=m;
}
}return x;
}
mat pro(mat x,mat y){//相乘
mat z;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
z.e[i][j]=;
for(int k=;k<=n;k++){
z.e[i][j]+=x.e[i][k]*y.e[k][j];
z.e[i][j]%=m;
}
}
}return z;
}
mat pow(mat x,int k){//次方
mat z;
if(k==){
return x;
}
if(k%==){
z=pow(pro(x,x),k/);
return z;
}else{
z=pow(pro(x,x),k/);
return pro(z,x);
}
}
mat doit(mat x,int k){//相加
if(k==){
return x;
}
if(k%==){
mat z;
z=doit(x,k/);
return plu(z,pro(z,pow(x,k/)));
}else{
mat z,z1;
z=doit(x,k/);
z1=pow(x,k/);
return plu(plu(z,pro(z,z1)),pro(pro(z1,z1),x));
}
}
int main(){
int k;
mat a;
scanf("%d%d%d",&n,&k,&m);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
scanf("%d",&a.e[i][j]);
a.e[i][j]%=m;
}
}
mat ans=doit(a,k);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
ans.e[i][j]%=m;
printf("%d ",ans.e[i][j]);
}
cout<<endl;
}
return ;
}

POJ3233 Matrix Power Series 矩阵乘法的更多相关文章

  1. Poj 3233 Matrix Power Series(矩阵乘法)

    Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Description Given a n × n matrix A and ...

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

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

  3. POJ3233 [C - Matrix Power Series] 矩阵乘法

    解题思路 题目里要求\(\sum_{i=1}^kA^i\),我们不妨再加上一个单位矩阵,求\(\sum_{i=0}^kA^i\).然后我们发现这个式子可以写成这样的形式:\(A(A(A...)+E)+ ...

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

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

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

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

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

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

  7. 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 ...

  8. [POJ3233]Matrix Power Series 分治+矩阵

    本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia [POJ3233]Matrix Power Series 分治+矩阵 题目大意 A为n×n(n<= ...

  9. poj3233Matrix Power Series(矩阵乘法)

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

随机推荐

  1. 关于angularJS的一些用法

    AngularJS 事件指令: ng-click/dblclick ng-mousedown/up ng-mouseenter/leave ng-mousemove/over/out ng-keydo ...

  2. three.js_camera相机

    https://blog.csdn.net/yangnianbing110/article/details/51275927 文章地址

  3. Sublime text 3中文汉化教程

    想弄个中文版的sublime,居然可以不用重新下载汉化包或者重新下载简体中文版了~而是只需要安装个插件即可!   工具/原料   电脑 sublime text3编辑器 方法/步骤    启动并进入s ...

  4. Spring提供的iBatis的SqlMap配置

    1.    applicationContext.xml <!-- Spring提供的iBatis的SqlMap配置--> <bean id="sqlMapClient&q ...

  5. [001] leap_stage

    [Description] There is a number in each stages that indicates the most stages you can leap up. Now, ...

  6. device tree --- #address-cells and #size-cells property

    device tree source Example1 / { #address-cells = <0x1>; // 在 root node 下使用 1 個 u32 來代表 address ...

  7. Gym 101081K Pope's work

    题目链接:Gym - 101081K 题意:给n个箱子,每个箱子有一个重量W和一个承重R,表示它上面能放最多R-W的重量.问最多能把多少箱子堆到一堆. 思路:发现在一堆箱子里,两个箱子交换位置,对其他 ...

  8. openjudge-NOI 2.6-2728 摘花生

    题目链接:http://noi.openjudge.cn/ch0206/2728/ 题解: 某一个点只能从其左边或者上边走过来 f[i][j]存储(i,j)这个点上的结果,即f[i][j]=max(f ...

  9. 004ICMP-type对应表

    一次在某个防火墙配置策略里看到如下的代码: iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT iptables -A FORWARD -p icmp ...

  10. 运行级别(run level)

    inittab是很多linux版本的启动脚本.Linux在完成核内引导以后,就开始运行init程序,它的进程号是1,是所有其他进程的起点.init需要读取/etc/inittab,该文件告诉init在 ...