题解 P4783 【【模板】矩阵求逆】
题目大意
求一个N×N的矩阵的逆矩阵。答案对10^9+7取模。N<=400
前置知识
矩阵的初等变换
矩阵的逆定义为 A*B=E(E为单位矩阵)此时B为A的逆
思路
如果矩阵有逆
那么这个矩阵经过一系列初等变化之后可以变为E
设一系列初等变化分别为p1,p2,p3...px
显然可得A*p1*p2*p3*...*px=E
所以B=p1*p2*p3*...*px
这样的话就很好做了
我们利用高斯消元来让A逐渐变为单位矩阵
设B初始为E
B也跟着A同步变换
那么到A变为单位矩阵时 B也就是p1*p2*p3*...*px的值了
矩阵无逆的情况显然是高斯消元无法再消(a[1][i]-a[n][i]都为0时)特判输出就行哩
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define C getchar()-48
inline ll read()
{
ll s=,r=;
char c=C;
for(;c<||c>;c=C) if(c==-) r=-;
for(;c>=&&c<=;c=C) s=(s<<)+(s<<)+c;
return s*r;
}
const ll N=,p=1e9+;
ll n;
struct xin{
ll a[N][N];
//inline int* operator [](int x){return a[x];} // b的话直接调用b[][]
inline void swap(int x,int y){for(int i=;i<=n;i++) swap(a[x][i],a[y][i]);}
inline void mul(int x,int k){for(int i=;i<=n;i++) a[x][i]=(a[x][i]*k%p+p)%p;}//a[x]=k*a[y];
inline void add(int x,int y,int k){for(int i=;i<=n;i++) a[x][i]=((a[x][i]+a[y][i]*k)%p+p)%p;}// a[x]加k*a[y]
inline void prt()
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++) printf("%lld ",a[i][j]);
printf("\n");
}
}
}a,b;
inline ll ksm(ll a,ll b)
{
ll ans=;
while(b)
{
if(b&) ans=(ans*a)%p;
a=(a*a)%p;
b>>=;
}
return ans;
}
void gaosi()
{
for(int i=;i<=n;i++)
{
if(!a.a[i][i]) for(int j=i+;j<=n;j++) if(a.a[j][i])
{
a.swap(i,j);b.swap(i,j);
break;
}
if(!a.a[i][i]){printf("No Solution\n");exit();}
b.mul(i,ksm(a.a[i][i],p-));a.mul(i,ksm(a.a[i][i],p-));//把所有项除a[i][i] 变成a[i][i]变成1
for(int j=;j<=n;j++)
{
if(i==j) continue;
b.add(j,i,-a.a[j][i]);a.add(j,i,-a.a[j][i]);//消去 b要放前面因为a放前面会被修改
}
}
}
int main()
{
n=read();
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
a.a[i][j]=read();
for(int i=;i<=n;i++) b.a[i][i]=;
gaosi();
b.prt();
return ;
}
题解 P4783 【【模板】矩阵求逆】的更多相关文章
- luoguP4783 [模板]矩阵求逆 线性代数
		求\(n^2\)的矩阵的逆 翻了翻题解,看到了初等矩阵这个东西,突然想起来在看线代的时候看到过.... 然后又温习了一遍线性代数的知识 不妨设\(PA = E\),其中\(P\)是一堆初等矩阵的积(必 ... 
- 字符串 kmp算法  codeforce 625B 题解(模板)
		题解:kmp算法 代码: #include <iostream>#include <algorithm>#include <cstring>#include < ... 
- CCF-CSP题解 201509-3 模板生成系统
		简单的替换一下字符串. 注意数组开大点. #include<bits/stdc++.h> const int maxm = 100; const int maxn = 100; using ... 
- 【刷题】洛谷 P3804 【模板】后缀自动机
		题目描述 给定一个只包含小写字母的字符串 \(S\) , 请你求出 \(S\) 的所有出现次数不为 \(1\) 的子串的出现次数乘上该子串长度的最大值. 输入输出格式 输入格式: 一行一个仅包含小写字 ... 
- [BZOJ3224]Tyvj 1728 普通平衡树
		[BZOJ3224]Tyvj 1728 普通平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个) ... 
- [UOJ#34]多项式乘法
		[UOJ#34]多项式乘法 试题描述 这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入 第一行两个整数 n 和 m,分别表示两个多项式的次数. 第二行 n+1 个整数,分别表示第一个多 ... 
- 1711 Number Sequence(kmp)
		Problem Description Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], .... ... 
- 【LCT】BZOJ2049 [SDOI2008]Cave 洞穴勘测
		2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 10059 Solved: 4863[Submit ... 
- 【网络流】POJ1273 Drainage Ditches
		Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 78671 Accepted: 3068 ... 
随机推荐
- 【spring实战第五版遇到的坑】3.1中的例子报错
			按照书中的例子,一直做到第3.1章使用JDBC读写数据时,在提交设计的taco表单时,报了如下的异常信息: Failed to convert property value of type java. ... 
- Ubunttu16.04升级/更新git版本(亲测有效)
			sudo add-apt-repository ppa:git-core/ppa sudo apt-get update sudo apt-get install git 升级前: 升级后: 
- Centos7下用FastDFS搭建图片服务器
			1.所用到的工具: 1.FastDFS_v5.05.tar 2.fastdfs-nginx-module_v1.16.tar 3.libfastcommonV1.0.7.tar 4.nginx-1.1 ... 
- Python数据处理与计算——概述
			Python是一种面向对象的,动态的程序设计语言,具有非常简洁而清晰的语法,适合于完成各种高层任务.它既可以用来快速开发程序脚本,也可以用来开发大规模的软件. 随着NumPy.SciPy.Matplo ... 
- <3>Centos系统完整安装python流程
			一.环境 系统:Centos7 Python:3.6.5 自带pip.setuptools 二.命令 介绍:因为yum是依赖于python2,所以千万别删除自带的python2,下面的方法就是py2 ... 
- DVWA 黑客攻防演练(十三)JS 攻击 JavaScript Attacks
			新版本的 DVWA 有新东西,其中一个就是这个 JavaScript 模块了. 玩法也挺特别的,如果你能提交 success 这个词,成功是算你赢了.也看得我有点懵逼. 初级 如果你改成 " ... 
- (爬虫)requests库
			一.requests库简介 urllib库和request库的作用一样,都是服务器发起请求数据,但是requests库比urllib库用起来更方便,它的接口更简单,选用哪种库看自己. 如果没有安装过这 ... 
- MongoDB自学(4)
			超过存储上限或记录条数删除最早的记录:db.createCollection("集合名",{capped:true,size:1024,max:100})注解:指定集合名的最大记录 ... 
- .net core 命令行(仅作记录)
			命令大全:dotnet 命令 创建NuGet包:如何使用 .NET Core 命令行接口 (CLI) 工具创建 NuGet 包 
- selenium之元素定位-xpath
			被测试网页的HTML代码 <html> <body> <div id="div1" style="text-align:center&quo ... 
