题意:给你一个矩阵A,求S=A+A^2+A^3+...+A^k。

  其实这个当时我看着毫无头绪,看了他们给的矩阵发现好!精!妙!

  我们这样看

       

         

   是不是有点思路!

   没错!就是右上角,我们以此类推可以得到A+A^2+A^3+...+A^k+E,我们只要再减去个单位矩阵就好了。

   但是!我矩阵里面怎么套矩阵!肿!么!办!其实很简单,一个n*n的矩阵,我们可以把它看成(2*n)*(2*n)的矩阵,就把他分成了四份,就如上图所示,就很简单了!

  注意下小坑点:减了可能就负了,后面减完要加个mod(ง •_•)ง

#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<cstring>
#include<queue>
#include<set>
#include<string>
#include<map>
#include <time.h>
#define PI acos(-1)
using namespace std;
typedef long long ll;
typedef double db;
const int maxn = ;
const int N = ;
const ll maxm = 1e7;
const int INF = 0x3f3f3f;
const ll inf = 1e15 + ;
const db eps = 1e-;
ll n, k, mod;
struct Matrix{
ll mat[maxn][maxn];
Matrix operator*(const Matrix& m)const{
Matrix tmp;
for (int i = ; i <= n; i++) {
for (int j = ; j <= n; j++) {
tmp.mat[i][j]=;
for (int k = ; k <= n; k++) {
tmp.mat[i][j] += mat[i][k]*m.mat[k][j]%mod;
tmp.mat[i][j]+=mod;
tmp.mat[i][j] %= mod;
}
}
}
return tmp;
}
}; int Pow(Matrix &m, int k) {
Matrix ans;
memset(ans.mat , , sizeof(ans.mat));
for (int i=; i<=n; i++) {
ans.mat[i][i]=;
ans.mat[i+n][i+n]=;
}
n*=;
while(k){
if(k&)
ans = ans*m;
k >>= ;
m = m*m;
}
n/=;
for (int i=; i<=n; i++) {
ans.mat[i][i+n]--;
ans.mat[i][i+n]+=mod;
ans.mat[i][i+n]%=mod;
}
for (int i=; i<=n; i++) {
for (int j=; j<=n; j++) {
if (j==n) printf("%d\n", ans.mat[i][j+n]);
else printf("%d ", ans.mat[i][j+n]);
}
}
} void solve() {
Matrix m; memset(m.mat, , sizeof(m.mat));
scanf("%lld%lld%lld", &n, &k, &mod);
for (int i = ; i <= n; i++) {
for (int j = ; j <= n; j++) {
scanf("%lld", &m.mat[i][j]);
m.mat[i][i+n]=;
m.mat[i+n][i+n]=;
}
}
k++;
Pow(m, k); }
int main() {
int t = ;
//freopen("in.txt", "r", stdin);
// scanf("%d", &t);
while(t--)
solve();
return ;
}

      

经典矩阵快速幂之一-----poj3233(矩阵套矩阵的更多相关文章

  1. Luogu P3390 【模板】矩阵快速幂&&P1939 【模板】矩阵加速(数列)

    补一补之前的坑 因为上次关于矩阵的那篇blog写的内容太多太宽泛了,所以这次把一些板子和基本思路理一理 先看这道模板题:P3390 [模板]矩阵快速幂 首先我们知道矩阵乘法满足结合律而不满足交换律的一 ...

  2. 矩阵快速幂——将运算推广到矩阵上HDU 1575

    /* 本题的思路比较简单,就是将递推公式写出来,然后表达成为一个矩阵的形式 最后通过计算就可以得到一个符合题目要求的矩阵, 然后就是将矩阵上面所有的对角线元素相加 得到的结果即为所求的目标 */ #i ...

  3. 矩阵快速幂+二分 poj3233

    #include <iostream> #include <cstdio> #include <string> #include <cstring> # ...

  4. hdu 1005 Number Sequence(矩阵快速幂,找规律,模版更通用)

    题目 第一次做是看了大牛的找规律结果,如下: //显然我看了答案,循环节点是48,但是为什么是48,据说是高手打表出来的 #include<stdio.h> int main() { ], ...

  5. poj 3070 Fibonacci (矩阵快速幂乘/模板)

    题意:给你一个n,输出Fibonacci (n)%10000的结果 思路:裸矩阵快速幂乘,直接套模板 代码: #include <cstdio> #include <cstring& ...

  6. Count Numbers(矩阵快速幂)

    Count Numbers 时间限制: 8 Sec  内存限制: 128 MB提交: 43  解决: 19[提交] [状态] [讨论版] [命题人:admin] 题目描述 Now Alice want ...

  7. hdu 5451 Best Solver 矩阵循环群+矩阵快速幂

    http://acm.hdu.edu.cn/showproblem.php?pid=5451 题意:给定x    求解 思路: 由斐波那契数列的两种表示方法, 之后可以转化为 线性表示 F[n] = ...

  8. 矩阵快速幂---BestCoder Round#8 1002

    当要求递推数列的第n项且n很大时,怎么快速求得第n项呢?可以用矩阵快速幂来加速计算.我们可以用矩阵来表示数列递推公式比如fibonacci数列 可以表示为 [f(n)   f(n-1)] = [f(n ...

  9. P3390 【模板】矩阵快速幂

    题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k ...

随机推荐

  1. win10 安装php

    缺失:msvcp110.dll https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=30679

  2. webpack 打包问题2

  3. Trigger,Cursor

    USE [Demo]GO /****** Object: StoredProcedure [dbo].[p_couser_Student] Script Date: 02/24/2014 20:43: ...

  4. PHP序列及反序列化安全漏洞

      尽量阐述全PHP序列化的相关东西-.- 1.序列化和反序列化   序列化是将变量或对象转换成字符串的过程:反序列化是将字符串转换成变量或对象的过程.   序列化及反序列化常见函数:serializ ...

  5. C语言之栈区、堆区

    一 局部变量存放在栈区中,函数调用结束后释放内存空间. #include "stdio.h"; #include "stdlib.h"; int *getNum ...

  6. [剑指Offer]47-礼物的最大价值(DP)

    题目描述 在一个m*n的棋盘每个格有一个礼物,每个礼物有一定价值(>0).从棋盘左上角到右下角,只能向下或向右走,问能拿到的礼物最大价值. 解题思路 dp. 可将二维数组版优化为一维数组版. 代 ...

  7. 流(Stream)、文件(File)和IO

    读取控制台输入 Java 的控制台输入由 System.in 完成. 为了获得一个绑定到控制台的字符流,你可以把 System.in 包装在一个 BufferedReader 对象中来创建一个字符流. ...

  8. 类似No module named 'bs4'等错误的解决方法

    最近开始接触爬虫,写了如下源代码: from bs4 import BeautifulSoup import requests url='https://www.tripadvisor.cn/Attr ...

  9. ROS launch总结

    1 运行Launch文件2 新建Launch文件3  在namespace中启动nodes 4   remapping names 5 其他的launch元素 1 运行Launch文件 Launch文 ...

  10. IDEA配置maven,jdk,编码

    1.电脑已解压maven,修改好settings.xml文件,本地仓库,下载远程镜像 2.