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

【题意】给定矩阵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. python获取前几天的时间

    days的参数就是你想获取前多少天的数据,如果是昨天的话,则days=1 import datetime today=datetime.date.today() oneday=datetime.tim ...

  2. WOL*LAN远程换醒命令行方法

    wol远程唤醒需要网卡的支持,现在一般的网卡也都支持,只有有线网络能实现. 这里介绍Wake On Lan Command Line的使用 下载地址 https://www.depicus.com/w ...

  3. jquery中on绑定click事件在苹果手机失效问题解决(巨坑啊)

    描述:用一个div写一个按钮,并给这个按钮添加一个点击事件,在安卓机器上一切正常,但是在苹果机型上会出现点击事件失效. <!DOCTYPE html> <html lang=&quo ...

  4. Spring mvc 数据验证框架注解

    @AssertFalse 被注解的元素必须为false@AssertTrue 被注解的元素必须为false@DecimalMax(value) 被注解的元素必须为一个数字,其值必须小于等于指定的最小值 ...

  5. 【Django】Django—Form两种解决表单数据无法动态刷新的方法

    一.无法动态更新数据的实例 1. 如下,数据库中创建了班级表和教师表,两张表的对应关系为“多对多” from django.db import models class Classes(models. ...

  6. 【uoj#21】[UR #1]缩进优化 数学

    题目描述 给出 $n$ 个数 ,求 $\text{Min}_{x=1}^{\infty}\sum\limits_{i=1}^n(\lfloor\frac {a_i}x\rfloor+a_i\ \tex ...

  7. python传参

    写在前面 Python唯一支持的参数传递方式是『共享传参』(call by sharing) 多数面向对象语言都采用这一模式,包括Ruby.Smalltalk和Java(Java的引用类型是这样,基本 ...

  8. 一些noip模拟题一句话题解

    Problem A: 序列 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 12  Solved: 9[Submit][Status][Web Boar ...

  9. 【BZOJ4405】【WC2016】挑战NPC(带花树)

    [BZOJ4405][WC2016]挑战NPC(带花树) 题面 BZOJ 洛谷 Uoj Description 小N最近在研究NP完全问题,小O看小N研究得热火朝天,便给他出了一道这样的题目: 有n个 ...

  10. C++操作Windows WIFI

    原文链接地址:https://blog.csdn.net/just_do_1122/article/details/78031024 实现功能     无线网卡列表     无线热点扫面     无线 ...