POJ 3233

题解:Sn为所求矩阵, 则

这样, 此题就变成了求矩阵幂和矩阵乘法, 分块矩阵乘法和普通矩阵一样的。

code:

/*
adrui's submission
Language : C++
Result : Accepted
Love : ll
Favorite : Dragon BallsStanding in the Hall of Fame
*/#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<iostream>
#include<bitset>
#include<map>
using namespace std;#define M(a, b) memset(a, b, sizeof(a))
#define mid ((l + r) >> 1)
#define ls rt << 1, l, mid
#define rs rt << 1|1, mid + 1, r
#define lowbit(x) (x & (-x))
#define LL long long
#define REP(n) for(int i = 0; i < n; i++)
#define debug 0
#define mod 1000int n, k, m;struct Matrix {int mat[65][65];                                                     //分块矩阵原因, size要是2倍void init() {                                                          //单位矩阵M(mat, 0);for (int i = 0; i < 65; i++)mat[i][i] = 1;}void output(int c) {for (int i = 0; i < c; i++) {for (int j = 0; j < c; j++){printf("%d%s", mat[i][j] % m, j != c - 1 ? " " : "\n"); }}}
};Matrix operator * (Matrix a, Matrix b) {                                  //矩阵乘法Matrix c; M(c.mat, 0);for (int i = 0; i < 2 * n; i++) {for (int j = 0; j < 2 * n; j++){for (int k = 0; k < 2 * n; k++)c.mat[i][j] += (a.mat[i][k] * b.mat[k][j]) % m;c.mat[i][j] %= m;}}return c;
}Matrix operator + (const Matrix &a, const Matrix &b) {                        //矩阵加法Matrix c;for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++){c.mat[i][j] = (a.mat[i][j] + b.mat[i][j]) % m;}}//c.output();return c;
}Matrix Matrix_fast_mod(Matrix tmp, int b) {                                    //快速矩阵幂Matrix res;res.init();                                                               //单位矩阵while (b) {if (b & 1) res = tmp * res;tmp = tmp * tmp;b >>= 1;}return res;
}int main() {
#if debugfreopen("in.txt", "r", stdin);
#endif //debugwhile (~scanf("%d%d%d", &n, &k, &m)) {Matrix ans, b;M(b.mat, 0);Matrix res;for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {scanf("%d", &res.mat[i][j]);res.mat[i][j] %= m;b.mat[i][j] = res.mat[i][j];                                //b是幂底数矩阵res.mat[i][n + j] = res.mat[i][j];                           //ret是包含Sn的分块矩阵}b.mat[n + i][i] = b.mat[n + i][n + i] = 1;}//b.output(2 * n);b = Matrix_fast_mod(b, k - 1);                                       //矩阵幂//b.output(2*n);//res.output(2 * n);ans = res * b;ans.output(n);                                      //输出}return 0;
}

poj 3233 矩阵乘法(分块矩阵)相关推荐

  1. Ybtoj-排列计数【矩阵乘法,分块幂】

    正题 题目链接:http://noip.ybtoj.com.cn/contest/596/problem/1 题目大意 TTT组询问给出nnn求有多少个nnn的排列满足第一个是111并且相邻的差不超过 ...

  2. lu分解法matlab_MIT 18.065—机器学习中的矩阵方法02 矩阵乘法与矩阵分解

    数据分析.信号处理和机器学习中的矩阵方法 第02讲 矩阵乘法与矩阵分解 新MIT 线性代数|机器学习(中英机翻字幕)18.065 by Gilbert Strang_哔哩哔哩 (゜-゜)つロ 干杯~- ...

  3. 二维矩阵乘法、矩阵转置、 矩阵与向量乘法(java实现)

    二维矩阵乘法.矩阵转置. 矩阵与向量乘法(java实现) 相关代码如下: package algorithms; //矩阵库 public class Matrisx { /***向量点相乘 doub ...

  4. matlab矩阵乘法结果出错,为啥矩阵乘法显示矩阵乘法维度不正确?是什么原因?...

    EDA365欢迎您登录! 您需要 登录 才可以下载或查看,没有帐号?注册 x 为啥矩阵乘法显示矩阵乘法维度不正确?是什么原因?代码如下: 7 ^$ @: y: ^, w) ^1 S # `/ S: I ...

  5. 矩阵的基础知识回顾:矩阵乘法,矩阵的逆,伴随矩阵,矩阵的转置,行列式,相似矩阵,实对称矩阵

    Agenda 1. 矩阵matrix 1.1 矩阵运算matrix operations 1.1.1 矩阵乘法matrix multiplication 1.1.1.1 简化矩阵乘法(facilita ...

  6. 疯子的算法总结(五) 矩阵乘法 (矩阵快速幂)

    学过线性代数的都知道矩阵的乘法,矩阵乘法条件第为一个矩阵的行数等与第二个矩阵的列数,乘法为第一个矩阵的第一行乘以第二个矩阵的第一列的对应元素的和作为结果矩阵的第一行第一列的元素.(详解参见线性代数) ...

  7. Vijos 1603 ----迷宫(矩阵乘法,矩阵快速幂)

    描述 在某个神秘的星球上有一个游乐园 游乐园里有一个奇怪的迷宫,迷宫内有n个点,每个点之间都可能会有一条有向边(可能会有自环) 现在游乐园主有个问题想请你帮忙: 问:从s点走到f点,恰好走过m条边(边 ...

  8. 矩阵问题入门(矩阵乘法and矩阵快速幂)acm寒假集训日记22/1/15

    今天凌晨3点才睡,没想到通过看小说抑制玩游戏,反而看小说的时间更长. u1s1:那小说太刺激了,晚上看很有感觉,风吹草动我就会猛地看过去(类似茄子说柜子动了,哈哈),真TM(语气词)练胆量!!!..Q ...

  9. strassen矩阵乘法 java_Strassen 矩阵算法 Java 实现

    展开全部 算法如下: //STRASSEN矩阵算法 #include const int N=8; //常量N用来定义矩阵的大小 void main() { void STRASSEN(int n,f ...

  10. numpy矩阵乘法_NumPy矩阵乘法

    numpy矩阵乘法 NumPy matrix multiplication can be done by the following three methods. NumPy矩阵乘法可以通过以下三种方 ...

最新文章

  1. 求两个数的最大公因数
  2. RabbitMQ安装方法 安装完成已验证方法步骤可行性
  3. P3403 跳楼机 同余最短路
  4. labelimg如何调整框的颜色_如何制作摄影集(下)
  5. 如何估算太坊交易的gas消耗量
  6. LFM算法详解和实战
  7. 机器学习-多元分类/回归决策树模型(tree包)
  8. 未来是否繁花似锦,源自我们当下之努力
  9. 计算机主板pci插槽,什么是PCI插槽 PCI-E插槽如何辨别【详解】
  10. android 没有menu菜单键,android之onCreateOptionsMenu失效,按菜单键无反应
  11. 全面了解ADSL,让你上网更轻松
  12. 使用 Arduino 和电位器控制直流电机速度
  13. 暴走的Polkadot (DOT)(上)
  14. 手机怎么把php转换mp3,如何使用MP3转换器转换音频格式
  15. c语言Dvv实验报告,电渗实验报告
  16. 基于OAtuth2的新浪微博Java爬虫
  17. 优秀的计算机编程类博客 和 文章
  18. ubuntu10的pci扩展卡驱动安装失败后检查方法
  19. 两分钟解决Unity谜之问题,License error,Unity2021打不开
  20. 你用QQ注册过哪些网站/应用,想不想查询一下,然后取消授权呢?

热门文章

  1. 9.3 挂钩API技术(HOOK API)
  2. 多语言通信基础 03 go和python的rpc通信
  3. Discuz插件 微信购买会员用户组V2.180418商业版
  4. p-value,q-value,FDR
  5. 在ubuntu系统中搭建笔记文档(typora+Picgo+Gitee)(全程记录)
  6. Rundeck基础:7:基础概念:Plugin
  7. vue如何创建vnode_【Vue原理】Component - 源码版 之 创建组件VNode
  8. 时间之“时间波以及时间裂缝说”
  9. c++ 空间向量类(Vector3D)的实现
  10. 华为补助武汉员工,最高每日 2000 元;谷歌更新安卓修复数百万台芯片漏洞;Fuchsia OS进入开发者试用阶段 | EA周报...