正题

题目链接:https://www.luogu.com.cn/problem/P4783


题目大意

给出一个矩阵,求它的逆矩阵。

1≤n≤4001\leq n\leq 4001≤n≤400


解题思路

记给出矩阵PPP,记单位矩阵EEE。
P×P−1=E⇒P×(E×P−1)=EP\times P^{-1}=E\Rightarrow P\times (E\times P^{-1})=EP×P−1=E⇒P×(E×P−1)=E

虽然看上去上面那个式子是废话,但是这是一个提示。

因为PPP进行初等变化变为EEE的过程中相当于乘上了一个P−1P^{-1}P−1,而P−1×E=P−1P^{-1}\times E=P^{-1}P−1×E=P−1。所以如果我们拿一个EEE和PPP做一样的初等变化就变为了P−1P^{-1}P−1。

写个高斯消元就好了,但是需要注意因为一般的消元会自动省略已经消掉的部分,但是因这里要处理P−1P^{-1}P−1矩阵所以不能这么做。

时间复杂度O(n3)O(n^3)O(n3)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=410,P=1e9+7;
ll n,a[N][N],b[N][N];
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
bool work(){for(ll i=1;i<=n;i++){for(ll j=i;j<=n;j++)if(a[j][i]){if(i!=j)swap(a[j],a[i]),swap(b[j],b[i]);break;}if(!a[i][i])return 1;ll inv=power(a[i][i],P-2);for(ll j=1;j<=n;j++)a[i][j]=a[i][j]*inv%P,b[i][j]=b[i][j]*inv%P;for(ll j=i+1;j<=n;j++){ll rate=P-a[j][i];for(ll k=1;k<=n;k++){(a[j][k]+=rate*a[i][k]%P)%=P;(b[j][k]+=rate*b[i][k]%P)%=P;}}}for(int i=n;i>=1;i--)for(int j=1;j<i;j++){for(int k=1;k<=n;k++)(b[j][k]+=P-a[j][i]*b[i][k]%P)%=P;a[j][i]=0;}return 0;
}
signed main()
{scanf("%lld",&n);for(ll i=1;i<=n;i++){for(ll j=1;j<=n;j++)scanf("%lld",&a[i][j]);b[i][i]=1;}if(work())return 0&puts("No Solution");for(ll i=1;i<=n;i++,putchar('\n'))for(ll j=1;j<=n;j++)printf("%lld ",b[i][j]);return 0;
}

P4783-[模板]矩阵求逆相关推荐

  1. 高斯消元相关问题学习和模板整理

    目录 前言 高斯消元法 模板 行列式求值 模板 矩阵求逆 模板 前言 为什么要写这篇文章?因为icpc济南J题翻车了,不会写行列式,手里没板子,现场抄书手写,过不了实属正常,所以必须要整理一下高斯消元 ...

  2. 洛谷 - P4783 【模板】矩阵求逆(高斯消元求逆矩阵)

    题目链接:点击查看 题目大意:给出一个 n * n 的矩阵,求出其逆矩阵,mod 为 1e9 + 7,若不存在输出 No Solution 题目分析:囤个模板,原理就是,初始时在原矩阵右侧设置一个单位 ...

  3. 【模板】矩阵求逆(矩阵初等变换)

    O(n5)O(n^5)O(n5) 做法: 先求出 AAA 的伴随矩阵 A∗A^{*}A∗,后利用 A∗A∗=∣A∣∗E⇒A−1=A∗∣A∣A*A^{*}=|A|*E\Rightarrow A^{-1} ...

  4. 【暖*墟】#逆矩阵# 矩阵求逆的思路与方法

    矩阵求逆的思路与方法 逆矩阵的定义 若一个n*n的方阵A可逆,则存在一个n*n的方阵B, 使得.则称B是A的一个逆矩阵.A的逆矩阵记作A-1. (1)验证两个矩阵互为逆矩阵 矩阵       按照矩阵 ...

  5. OI模板大全(普及~省选NOI)

    整理的算法模板合集: ACM模板 hhh刚从某位大佬的洛谷首页偷到了一个好玩的东西 大佬在这儿 自己对照了一下原来我还有这么多东西没有学呜呜呜我好菜 普及- 模板大全续表续表A并查集A快速幂-取余运算 ...

  6. jiedai算法模板合集(正在肝2021.8.15)

    文章目录 基础模板 常用板子 数学题常用板子 输出挂 fread快读 高精度 分数类 打表压缩 基数排序 杂项 数据结构 树状数组 一维树状数组 二维树状数组 线段树 主席树 线段树合并/裂开 吉司机 ...

  7. 高斯消元法java语言设计_高斯消元法(Gauss Elimination)【超详解模板】

    高斯消元法,是线性代数中的一个算法,可用来求解线性方程组,并可以求出矩阵的秩,以及求出可逆方阵的逆矩阵. 高斯消元法的原理是: 若用初等行变换将增广矩阵 化为 ,则AX = B与CX = D是同解方程 ...

  8. VS Code 安装插件、自定义模板、自定义配置参数、自定义主题、配置参数说明、常用的扩展插件

    1. 下载和官网教程 下载地址:https://code.visualstudio.com/ 官方教程:https://code.visualstudio.com/docs 2. 安装插件 安装扩展插 ...

  9. SpringBoot (三) :SpringBoot使用Freemarker模板引擎渲染web视图

    什么是Freemarker FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而 ...

  10. SpringBoot-web开发(三): 模板引擎Thymeleaf

    [SpringBoot-web系列]前文: SpringBoot-web开发(一): 静态资源的导入(源码分析) SpringBoot-web开发(二): 页面和图标定制(源码分析) 目录 1. 引入 ...

最新文章

  1. GridView 控件的执行顺序
  2. mac上配置php开发环境,Mac配置PHP开发环境
  3. P2617 Dynamic Rankings(整体二分)
  4. linux 端口号查看
  5. 【转】一个SQL查询出每门课程的成绩都大于80的学生姓名
  6. 包级别的 TCP/UDP 负载均衡和NAT(Network Address Translate)
  7. Linux——驱动开发
  8. 决策树模型实现冬小麦提取
  9. java tbase_TBase备份恢复实验
  10. 解析ISO17799方法
  11. web端前端自定义提示语信息
  12. 如何在电脑上装一个虚拟机
  13. 上门洗车APP --- Android客户端开发 前言及业务简介
  14. html 纯css设置转圈,CSS3 转圈彩色文字动画实例及animation-play-state属性规则
  15. 基于echarts 24种数据可视化展示,填充数据就可用,动手能力强的还可以DIY(演示地址+下载地址)
  16. 小鸟云虚拟主机Wordpress上传中文附件出现乱码
  17. 使用ggplot2画 点图、箱线图、小提琴图、蜂窝图、云雨图
  18. java 小数点左移_规格化数尾数左移解决什么问题
  19. 做xx闪购网站准备工作
  20. 20年跨考中科大计算机经验贴

热门文章

  1. 计算机常用英文句子,英文简历常用句子
  2. keras 自定义层input_从4个方面介绍Keras和Pytorch,并给你选择其中一个学习库的理由...
  3. shell最大出现和连续出现次数_shell脚本分析 nginx日志访问次数最多及最耗时的页面(慢查询)...
  4. php 谷歌语音,php 语音参考
  5. java 运行环境注册表_Java运行环境与Windows注册表
  6. 行者运行脚本命令_行者脚本指令说明
  7. 怎样用python批量处理文件夹_python批量处理文件或文件夹
  8. php怎么压缩文字,php实现的简单压缩英文字符串的代码
  9. [C++STL]deque容器用法介绍
  10. Zookeeper--Watcher机制源码剖析一