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. POJ 1050 To the Max (最大子矩阵和)

    题目链接 题意:给定N*N的矩阵,求该矩阵中和最大的子矩阵的和. 题解:把二维转化成一维,算下就好了. #include <cstdio> #include <cstring> ...

  2. 记一次诡异的bug调试——————关于JDK1.7和JDK1.8中HashSet的hash(key)算法的区别

    现象: 测试提了一个bug,我完全复现不了,但是最吊诡的是在其他人的机器上都可以复现.起初以为是SVN合并后出现的冲突,后来经过对比法排查: step 1: 我本地开两个jetty,一个跑合并之前的版 ...

  3. Linux CentOS 6.9(图形界面)安装中文输入法

    安装步骤 1. 切换到 root 用户,执行 yum -y install "@Chinese Support" 2. 退出终端,选择桌面菜单中 "System" ...

  4. 64_q1

    QMsgBox-0-9.20130830git94677dc.fc26.i686.rpm 13-Feb-2017 23:40 40674 QMsgBox-0-9.20130830git94677dc. ...

  5. U3D模拟仿真实现

    最近在做一个模拟仿真系统,数据源是一个实时数据库,场景中包含一些监测点.监测点给信号的方式是有物体到了监测点给上料信号,物体离开了监测点给下料信号:注意,如果有多个物体到达或离开监测点,那给信号的时间 ...

  6. LightOJ 1024 Eid(高精度乘法+求n个数最小公约数)

    题目链接:https://vjudge.net/contest/28079#problem/T 题目大意:给你n个数求这些数的最小公倍数(约数). 解题思路:还太菜了,看了别人的题解才会写,转自这里, ...

  7. CSU 1102 多连块拼图

    多连块拼图 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述     多连块是指由多个等大正方形边与边连接而成的平面连通图形.         ———— 维基百科      ...

  8. 语音性别识别 - 使用R提取特征

    步骤 1)安装R.windows操作系统安装包的链接:https://cran.r-project.org/bin/windows/base/ 2)切换当前路径为脚本所在路径 点击 文件 > 改 ...

  9. jquery datatable客户端分页保持

    请加入下面注释的参数,并强制刷新浏览器,即可解决,关键配置: "bStateSave":true, $("#tableID").DataTable({ &quo ...

  10. 环状序列(UVa1584)

    题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_prob ...