【算法】二分+矩阵快速幂

【题意】给定矩阵A和整数k,MOD,求A^0+A^1+A^2+...+A^k。

【题解】

定义题目要求的答案为f(n),即:

$$f_n=\sum_{i=0}^{n}A^i$$

当n为偶数时,可以拆成两半,后一半由前一半集体乘A(n/2)得到,即:

$$f_n=f_{\frac{n}{2}}(A^{\frac{n}{2}}+1)$$

当n为奇数时,直接递推:

$$f_n=f_{n-1}*A^n$$

复杂度O(n^3 log k)。

快速幂的单位矩阵是主对角线(左上到右下)全为1,其余全为0,不用memset就超时了,多用stdio.h。

#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
const int maxn=;
int n,MOD,kind;
struct Mat{ll a[maxn][maxn];}A; Mat ch(Mat a,Mat b){
Mat tmp;
memset(tmp.a,,sizeof(tmp.a));
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
tmp.a[i][j]=(tmp.a[i][j]+a.a[i][k]*b.a[k][j])%MOD;
return tmp;
}
Mat pow(int k){
Mat tmp=A,ans;
memset(ans.a,,sizeof(ans.a));
for(int i=;i<=n;i++)ans.a[i][i]=;
//快速幂初值为1(单位矩阵)!!!
while(k>){
if(k&)ans=ch(ans,tmp);
tmp=ch(tmp,tmp);
k>>=;
}
return ans;
}
Mat plus(Mat a,Mat b){
Mat tmp;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)tmp.a[i][j]=(a.a[i][j]+b.a[i][j])%MOD;
return tmp;
}
Mat calc(int k){
Mat tmp;
if(k<=)return A;
if(k&){
tmp=plus(calc(k-),pow(k));
}
else{
Mat tmps=calc(k/);
tmp=plus(tmps,ch(tmps,pow(k/)));
}
return tmp;
}
int main(){
scanf("%d%d%d",&n,&kind,&MOD);
for(int i=;i<=n;i++)for(int j=;j<=n;j++)scanf("%lld",&A.a[i][j]);
Mat ans=calc(kind);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++)printf("%lld ",ans.a[i][j]%MOD);
printf("\n");
}
return ;
}

还有一道题:HDU1588 Gauss Fibonacci

给定k,b,n,m,求:

$$ans=\sum_{i=0}^{n-1}Fib(k*i+b) \ \ mod \ \ m$$

定义A^i表示Fib(i)的斐波那契矩阵(见Fibonacci,左下角项),那么:

$$sum=A^b \times \sum_{i=0}^{n-1}(A^k)^i \ \ mod \ \ m$$

后面将$A^k$视为整体后,就是本题的套路了。

 

【POJ】3233 Matrix Power Series的更多相关文章

  1. POJ 3233 Matrix Power Series 【经典矩阵快速幂+二分】

    任意门:http://poj.org/problem?id=3233 Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K To ...

  2. 矩阵十点【两】 poj 1575 Tr A poj 3233 Matrix Power Series

    poj 1575  Tr A 主题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575 题目大意:A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的 ...

  3. POJ 3233 Matrix Power Series(二分等比求和)

    Matrix Power Series [题目链接]Matrix Power Series [题目类型]二分等比求和 &题解: 这题我原来用vector写的,总是超时,不知道为什么,之后就改用 ...

  4. POJ 3233 Matrix Power Series (矩阵乘法)

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

  5. [ACM] POJ 3233 Matrix Power Series (求矩阵A+A^2+A^3...+A^k,二分求和或者矩阵转化)

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

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

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

  7. 线性代数(矩阵乘法):POJ 3233 Matrix Power Series

    Matrix Power Series   Description Given a n × n matrix A and a positive integer k, find the sum S = ...

  8. POJ 3233 Matrix Power Series(矩阵快速幂)

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

  9. poj 3233 Matrix Power Series(矩阵二分,高速幂)

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

随机推荐

  1. YARN中用的作业调度算法:DRF(Dominant Resource Fairness)

    在Mesos和YARN中,都用到了dominant resource fairness算法(DRF),它不同于hadoop基于slot-based实现的fair scheduler和capacity ...

  2. jdbc 3.0

    1.将Blob.Clob类型数据保存到数据库 import java.io.File; import java.io.FileInputStream; import java.io.FileReade ...

  3. 将java开发的wordcount程序提交到spark集群上运行

    今天来分享下将java开发的wordcount程序提交到spark集群上运行的步骤. 第一个步骤之前,先上传文本文件,spark.txt,然用命令hadoop fs -put spark.txt /s ...

  4. linux 下svn忽略文件

    假设想忽略文件temp 1. cd到temp所在的目录下: 2. svn propedit svn:ignore . 注意:请别漏掉最后的点(.表示当前目录),如果报错请看下面 3. 打开的文件就是忽 ...

  5. so加载报错:dlopen failed: couldn't map ... Permission denied

    转自:https://blog.csdn.net/u013270444/article/details/60869376 问题描述: 我的应用当中集成了一个安全相关的sdk,而这个sdk中使用的so是 ...

  6. [C/C++] 指针数组和数组指针

    转自:http://www.cnblogs.com/Romi/archive/2012/01/10/2317898.html 这两个名字不同当然所代表的意思也就不同.我刚开始看到这就吓到了,主要是中文 ...

  7. SPAMS:稀疏建模工具箱

    https://chunqiu.blog.ustc.edu.cn/?p=570 http://spams-devel.gforge.inria.fr/index.html 在一篇显著性检测文章:Sal ...

  8. Mybatis笔记四:Mybatis中的resultType和resultMap查询操作实例详解

    resultType和resultMap只能有一个成立,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,resultMap解决复杂查询是的映射问题.比 ...

  9. BZOJ1187:[HNOI2007]神奇游乐园——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1187 Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现 ...

  10. 【目标检测】Faster RCNN算法详解

    Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal network ...