P4783-[模板]矩阵求逆
正题
题目链接:https://www.luogu.com.cn/problem/P4783
题目大意
给出一个矩阵,求它的逆矩阵。
\(1\leq n\leq 400\)
解题思路
记给出矩阵\(P\),记单位矩阵\(E\)。
\]
虽然看上去上面那个式子是废话,但是这是一个提示。
因为\(P\)进行初等变化变为\(E\)的过程中相当于乘上了一个\(P^{-1}\),而\(P^{-1}\times E=P^{-1}\)。所以如果我们拿一个\(E\)和\(P\)做一样的初等变化就变为了\(P^{-1}\)。
写个高斯消元就好了,但是需要注意因为一般的消元会自动省略已经消掉的部分,但是因这里要处理\(P^{-1}\)矩阵所以不能这么做。
时间复杂度\(O(n^3)\)
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-[模板]矩阵求逆的更多相关文章
- luoguP4783 [模板]矩阵求逆 线性代数
		求\(n^2\)的矩阵的逆 翻了翻题解,看到了初等矩阵这个东西,突然想起来在看线代的时候看到过.... 然后又温习了一遍线性代数的知识 不妨设\(PA = E\),其中\(P\)是一堆初等矩阵的积(必 ... 
- P4783 【模板】矩阵求逆
		原题链接 https://www.luogu.org/problemnew/show/P4783 一道模板题,更重要的省选难度..... 题目要求的是一个n*n的逆矩阵,还要对大数取膜. 普通高中生: ... 
- 洛谷 P4783 【模板】矩阵求逆
		题目分析 模板题. #include <bits/stdc++.h> using namespace std; typedef long long ll; const int mod=1e ... 
- LUOGU P4783 【模板】矩阵求逆(高斯消元)
		传送门 解题思路 用高斯消元对矩阵求逆,设\(A*B=C\),\(C\)为单位矩阵,则\(B\)为\(A\)的逆矩阵.做法是把\(B\)先设成单位矩阵,然后对\(A\)做高斯消元的过程,对\(B\)进 ... 
- 题解 P4783 【【模板】矩阵求逆】
		题目大意 求一个N×N的矩阵的逆矩阵.答案对10^9+7取模.N<=400 前置知识 矩阵的初等变换 矩阵的逆定义为 A*B=E(E为单位矩阵)此时B为A的逆 思路 如果矩阵有逆 那么这个矩阵经 ... 
- 洛谷P4783 【模板】矩阵求逆(高斯消元)
		题意 题目链接 Sol 首先在原矩阵的右侧放一个单位矩阵 对左侧的矩阵高斯消元 右侧的矩阵即为逆矩阵 // luogu-judger-enable-o2 #include<bits/stdc++ ... 
- LG4783 【模板】矩阵求逆
		P4783 [模板]矩阵求逆 题目描述 求一个$N\times N$的矩阵的逆矩阵.答案对$10^9+7$取模. 输入输出格式 输入格式: 第一行有一个整数$N$,代表矩阵的大小: 从第$2$行到第$ ... 
- matrix矩阵求逆 与解方程模板 留做备用  (有bug,待补充)
		// // main.cpp // 矩阵求逆 // // Created by 唐 锐 on 13-6-20. // Copyright (c) 2013年 唐 锐. All rights reser ... 
- Luogu4783 【模板】矩阵求逆(高斯消元)
		对矩阵进行高斯消元直至消为单位矩阵,并在另一个单位矩阵上对其做同样的操作即可. 模意义下的高斯消元可以直接计算系数来避免整行的辗转相除. 还不知道有什么用. #include<iostream& ... 
- OpenCV2邻域和模板操作
		在图像处理中,通过当前位置的邻域像素计算新的像素值是很常见的操作.当邻域包含图像的上几行和下几行时,就需要同时扫描图像的若干行,这就是图像的邻域操作了.至于模板操作是实现空间滤波的基础,通常是使用一个 ... 
随机推荐
- C++ com 组件的使用
			// CommonTest.cpp : This file contains the 'main' function. Program execution begins and ends there. ... 
- commandBinding 的命令
			<Window x:Class="WpfApplication1.Window29" xmlns="http://schemas.microsoft.com/win ... 
- 【权限管理】Spring Security 执行流程
			转自:https://blog.csdn.net/weixin_37689658/article/details/92752890 1.基本配置使用 (1)创建配置类 创建一个配置类SecurityC ... 
- win修改host问及那
- 虚拟机VMWare开机黑屏 无法进入系统
			参考了: https://blog.csdn.net/x534119219/article/details/79497264 可能方案一: 关闭VMware Workstation加速3D图形设置 可 ... 
- Android Jetpack基本架构之ViewModel+LiveData+DataBinding入门
			前提:导入所有依赖,开启DataBinding app的build.gradle android { defaultConfig { ... dataBinding { enabled true } ... 
- 手撕LRU缓存
			面试官:来了,老弟,LRU缓存实现一下? 我:直接LinkedHashMap就好了. 面试官:不要用现有的实现,自己实现一个. 我:..... 面试官:回去等消息吧.... 大家好,我是程序员学长,今 ... 
- 使用 IDEA 配合 Dockerfile 部署 SpringBoot 工程
			准备 SpringBoot 工程 新建 SpringBoot 项目,默认的端口是 8080 ,新建 Controller 和 Mapping @RestController public class ... 
- Shell脚本一键部署——源码编译安装MySQL及自动补全工具
			Shell脚本一键部署--源码编译安装MySQL及自动补全工具 编译安装MySQL 1.软件包 Mysql安装包 将安装包拖至/opt目录下,编辑一个脚本文件,将以下内容复制进去,然后source或者 ... 
- noip模拟32
			\(\color{white}{\mathbb{山高而青云冷,池深而蛟穴昏,行以慎步,援以轻身,名之以:落石}}\) 开题发现 \(t1\) 80分特别好写,于是先写了 但是这个做法没有任何扩展性,导 ... 
