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

题意:求矩阵的逆。

思路:高斯消元法求矩阵的逆,n为400,卡常,我是开了O2优化才AC的。。

AC代码:

#include<cstdio>
#include<cctype>
#include<algorithm>
#define R register int
using namespace std; const int maxn=;
const int MOD=1e9+;
int n; struct Matrix{
int m[maxn][maxn];
void SWAP(int x,int y){ //交换两行
for(R i=;i<=n;++i)
swap(m[x][i],m[y][i]);
}
void MUL(int x,int k){ //对一行乘上k
for(R i=;i<=n;++i)
m[x][i]=(1LL*m[x][i]*k%MOD+MOD)%MOD;
}
void MULADD(int x,int y,int k){ //将第y行乘上k加到第x行上去
for(R i=;i<=n;++i)
m[x][i]=((m[x][i]+1LL*m[y][i]*k%MOD)%MOD+MOD)%MOD;
}
}A,B; int qpow(int a,int b){ //求逆元
int ret=;
while(b){
if(b&) ret=1LL*ret*a%MOD;
a=1LL*a*a%MOD;
b>>=;
}
return ret;
} void Invmatrix(){
for(R i=;i<=n;++i){
if(!A.m[i][i]){
for(R j=i+;j<=n;++j)
if(A.m[j][i]){
B.SWAP(i,j);
A.SWAP(i,j);
break;
}
}
if(!A.m[i][i]){ //没有逆矩阵
puts("No Solution");
return;
}
int tmp=qpow(A.m[i][i],MOD-);
B.MUL(i,tmp);
A.MUL(i,tmp); //系数化为1
for(R j=i+;j<=n;++j){ //消元
tmp=-A.m[j][i];
B.MULADD(j,i,tmp);
A.MULADD(j,i,tmp);
}
}
for(R i=n-;i>=;--i) //回带
for(R j=i+;j<=n;++j){
int tmp=-A.m[i][j];
B.MULADD(i,j,tmp);
A.MULADD(i,j,tmp);
}
for(R i=;i<=n;++i){
for(R j=;j<=n;++j){
printf("%d",B.m[i][j]);
if(j!=n) printf(" ");
}
printf("\n");
}
} int main(){
scanf("%d",&n);
for(R i=;i<=n;++i)
for(R j=;j<=n;++j)
scanf("%d",&A.m[i][j]);
for(R i=;i<=n;++i){
for(R j=;j<=n;++j)
B.m[i][j]=;
B.m[i][i]=;
}
Invmatrix();
return ;
}

(模板)求逆矩阵luoguP4783的更多相关文章

  1. 模板-->求逆矩阵(利用初等变换求解)

    如果有相应的OJ题目,欢迎同学们提供相应的链接 相关链接 所有模板的快速链接 简单的测试 INPUT: 3 2 1 0 1 2 1 1 1 1 OUTPUT: 0.5 -0.5 0.5 0 1 -1 ...

  2. YTU 2642: 填空题:类模板---求数组的最大值

    2642: 填空题:类模板---求数组的最大值 时间限制: 1 Sec  内存限制: 128 MB 提交: 646  解决: 446 题目描述   类模板---求数组的最大值    找出一个数组中的元 ...

  3. matlab中求逆矩阵的高斯消元法实现的代码

    function qiuni =INV_GET(a)N=length(a);M=eye(N);%得到上三角矩?for i=1:N max=a(i,i); A=i; for j=i+1:N if(abs ...

  4. AtCoder Beginner Contest 142【D题】【判断素数的模板+求一个数的因子的模板】

    D - Disjoint Set of Common Divisors Problem Statement Given are positive integers AA and BB. Let us ...

  5. poj 2187 Beauty Contest 凸包模板+求最远点对

    题目链接 题意:给你n个点的坐标,n<=50000,求最远点对 #include <iostream> #include <cstdio> #include <cs ...

  6. Tarjan模板——求强连通分量

    Tarjan求强连通分量的流程在这个博客讲的很清楚,再加上我也没理解透,这里就不写了. 缩点:将同一个连通块内的点视为同一个点. 扔一道模板题:codeVS2822爱在心中 第一问很显然就是求点数大于 ...

  7. find the safest road---hdu1596(最短路模板求最大概率)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1596 求给定的任意两点之间的最大安全概率,概率之间是相乘的关系,所以注意初始化即可 #include& ...

  8. 模板 求GCD&LCM

    求最大公倍数 int GCD(int a,int b) { ) return b; else return GCD(b,a%b); } 求最小公倍数 int LCM(int a,int b) { re ...

  9. poj 3177&&poj 3352加边构双联通(有重边)用tarjan 模板求的

    #include<stdio.h>/* 求边双联通分量和求强连通差不多,先缩点求出叶子节点的个数 */ #include<string.h> #define N 5100 st ...

随机推荐

  1. 【题解】P1638 逛画展-C++

    原题传送门 思路这道题目可以通过尺取法来完成 (我才不管什么必须用队列)什么是尺取法呢?顾名思义,像尺子一样取一段,借用挑战书上面的话说,尺取法通常是对数组保存一对下标,即所选取的区间的左右端点,然后 ...

  2. HTML的基础

    HTML:超文本标记语言                            超文本包括:文字.图片.音频.视频.动画等 流程:写好HTML代码后通过浏览器(自动编译HTML代码)展现出效果 HTM ...

  3. vue项目,前端导出excel

    今天研究一下前端如何导出excel,边查边实践,边记录 1.安装依赖库 xlsx:这是一个功能强大的excel处理库,但是上手难度也很大,还涉及不少二进制的东西 file-saver:ES5新增了相关 ...

  4. 1937:【06NOIP普及组】数列

    woc 太捞了简直捞的一匹 我居然会写博客 反正呀没有人看 随便写写喽

  5. 编译工具链,生成各个平台的ffmpeg版本的库

    1.在开始动手编译ffmpeg之前我们来梳理一下几个概念,gcc.g++.msvc.mingw.clang.cmake.make.qmake 作为一个windows软件工程师,以为长时间浸淫在各种强大 ...

  6. mac使用技巧汇总

    1.在屏幕锁屏的时候,加入提示信息 sudo defaults write /Library/Preferences/com.apple.loginwindow LoginwindowText &qu ...

  7. JavaScript作用域与闭包总结

    1.全局作用域 所有浏览器都支持 window 对象,它表示浏览器窗口,JavaScript 全局对象.函数以及变量均自动成为 window 对象的成员.所以,全局变量是 window 对象的属性,全 ...

  8. sqlserver 锁表进程及执行的SQL

    --1.查进程select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableNamefrom sys.d ...

  9. ILI9341液晶显示

    17.1液晶显示原理 TFT-LCD(Thin Film Transistor Liquid Crystal Display)即薄膜晶体管液晶显示器,是微电子技术与液晶显示器技术巧妙结合的的一种技术. ...

  10. Qt自定义类添加qvector报错

    PtsData& PtsData::operator=(const PtsData& obj){ return *this;} PtsData::~PtsData(){ }