题目链接:http://poj.org/problem?id=3233

题目意思:给一个矩阵n*n的矩阵A和一个k,求一个式子 S = A + A2 + A3 + … + Ak。

这个需要用到等比数列和的二分加速。

当n为奇数的时候,Sn=Sn-1+A^k;

当n为偶数的时候,Sn=(S[n/2]+E)*A^(k/2)

自己xjb推一下就知道等比数列和的二分加速是咋回事了。我举个例子,我们假设求等比数列2,4,8,16,32,64的和s=(8+1)*(2+4+8),而2+4+8=(2+4)+8,而(2+4)=(2+1)*2,其他的可以一次类推。

这个过程我们可以直接用一个递归过程算出来,其余我们套用矩阵快速幂的模板就好了。

代码:

 //Author: xiaowuga
#include<iostream>
#include<cstring>
#define maxx INT_MAX
#define minn INT_MIN
#define inf 0x3f3f3f3f
#define size 35
using namespace std;
typedef long long ll;
int n,k,mod;
struct Mat{
int mat[size][size];
void clear(){
memset(mat,,sizeof(mat));
} Mat operator *(const Mat &e) const{
Mat tmp;
tmp.clear();
for(int k=;k<n;k++)
for(int i=;i<n;i++){
if(mat[i][k]==) continue;
for(int j=;j<n;j++){
if(e.mat[k][j]==) continue;
tmp.mat[i][j]+=mat[i][k]*e.mat[k][j]%mod;
tmp.mat[i][j]%=mod;
}
}
return tmp;
}
Mat operator +(const Mat &e) const{
Mat tmp;
tmp.clear();
for(int i=;i<n;i++){
for(int j=;j<n;j++){
tmp.mat[i][j]=(mat[i][j]%mod+e.mat[i][j]%mod)%mod;
}
}
return tmp;
}
};
Mat m,E;
Mat pow(Mat ma,ll num){
Mat ans;
ans.clear();
for(int i=;i<n;i++) ans.mat[i][i]=;
while(num){
if(num&) ans=ans*ma;
num/=;
ma=ma*ma;
}
return ans;
}
Mat fun(int x){
if(x==) return m;
if(x&) return fun(x-)+pow(m,x);
else return (pow(m,x/)+E)*fun(x/);
}
int main() {
ios::sync_with_stdio(false);cin.tie();
cin>>n>>k>>mod;
E.clear();
for(int i=;i<n;i++) E.mat[i][i]=;
for(int i=;i<n;i++)
for(int j=;j<n;j++) cin>>m.mat[i][j];
Mat ans=fun(k);
for(int i=;i<n;i++){
for(int j=;j<n;j++)
cout<<ans.mat[i][j]<<" ";
cout<<endl;
}
return ;
}

poj3233—Matrix Power Series的更多相关文章

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

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

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

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

  3. POJ3233]Matrix Power Series && [HDU1588]Gauss Fibonacci

    题目:Matrix Power Series 传送门:http://poj.org/problem?id=3233 分析: 方法一:引用Matrix67大佬的矩阵十题:这道题两次二分,相当经典.首先我 ...

  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. POJ3233:Matrix Power Series(矩阵快速幂+二分)

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

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

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

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

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

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

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

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

  10. poj3233 Matrix Power Series(矩阵快速幂)

    题目要求的是 A+A2+...+Ak,而不是单个矩阵的幂. 那么可以构造一个分块的辅助矩阵 S,其中 A 为原矩阵,E 为单位矩阵,O 为0矩阵    将 S 取幂,会发现一个特性: Sk +1右上角 ...

随机推荐

  1. Android 网络下载图片

    2中方法: 1. public byte[] downloadResource(Context context, String url) throws ClientProtocolException, ...

  2. element UI 的学习一,路由跳转

    1.项目开始: # 安装vue    $ cnpm install vue@2.1.6    # 全局安装 vue-cli    $ cnpm install --global vue-cli    ...

  3. SAP ERP 6.0 EHP7 SR2(WINDOWS MSSQL版)安装说明

    原文 by 枫竹丹青 ⋅ 1.安装准备 1.1.版本说明 本文是描述在一个Windows虚拟机.SQL Server数据库环境下,安装SAP ERP 6.0 EHP7 SR2服务器,安装完成虚拟机文件 ...

  4. C#大小写字母转换函数

    ToUpper:小写转大写ToLower:大写转小写 例如: string A="aasiDi778=AA"; string B=""; B=A.ToUpper ...

  5. CGPathCreateMutable

      ios 图形与动画学习笔记 构造路径(CGPathCreateMutable) 一系列点放在一起,构成了一个形状.一系列的形状放在一起,构成了一个路径. /* 路径属于我们正在绘制他们的上下文.路 ...

  6. php服务器环境变量

    可以把一些配置写到apache或nginx的配置里,然后在代码里判断环境变量来实现开发环境和线上环境的切换. 比如在本地可以 SetEnv APP_ENV local线上则 SetEnv APP_EN ...

  7. 示例 - 如何在NodeJS中调用SS生成的DLL

    要想在NodeJS中调用SS生成的DLL, 需要借助EdgeJS. EdgeJS: http://tjanczuk.github.io/edge/ 如果你还不知道如何在SS中生成DLL, 请查看: S ...

  8. spingboot集成jpa(一)

    springboot + jpa 练习 spingboot集成jpa(一):最基本的环境搭建 spingboot集成jpa(二):使用单元测试 1. pom.xml中添加依赖 <!-- jdbc ...

  9. 判断站点访问的终端类型(移动端还是pc端)的方法(转)

    要了解某个网站是在移动设备上打开的还是在pc web浏览器中打开的,我们可以有以下综合的几种方式来搞定: 通过判断Request.UserAgent中的具体信息来分析判断,因为UserAgent包含了 ...

  10. 【BZOJ】1045: [HAOI2008]糖果传递(中位数)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1045 白书上有讲 没ac的坑点在,数据范围n<=1,000,000 #include < ...