(模板)求逆矩阵luoguP4783
题目链接: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的更多相关文章
- 模板-->求逆矩阵(利用初等变换求解)
如果有相应的OJ题目,欢迎同学们提供相应的链接 相关链接 所有模板的快速链接 简单的测试 INPUT: 3 2 1 0 1 2 1 1 1 1 OUTPUT: 0.5 -0.5 0.5 0 1 -1 ...
- YTU 2642: 填空题:类模板---求数组的最大值
2642: 填空题:类模板---求数组的最大值 时间限制: 1 Sec 内存限制: 128 MB 提交: 646 解决: 446 题目描述 类模板---求数组的最大值 找出一个数组中的元 ...
- 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 ...
- AtCoder Beginner Contest 142【D题】【判断素数的模板+求一个数的因子的模板】
D - Disjoint Set of Common Divisors Problem Statement Given are positive integers AA and BB. Let us ...
- poj 2187 Beauty Contest 凸包模板+求最远点对
题目链接 题意:给你n个点的坐标,n<=50000,求最远点对 #include <iostream> #include <cstdio> #include <cs ...
- Tarjan模板——求强连通分量
Tarjan求强连通分量的流程在这个博客讲的很清楚,再加上我也没理解透,这里就不写了. 缩点:将同一个连通块内的点视为同一个点. 扔一道模板题:codeVS2822爱在心中 第一问很显然就是求点数大于 ...
- find the safest road---hdu1596(最短路模板求最大概率)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1596 求给定的任意两点之间的最大安全概率,概率之间是相乘的关系,所以注意初始化即可 #include& ...
- 模板 求GCD&LCM
求最大公倍数 int GCD(int a,int b) { ) return b; else return GCD(b,a%b); } 求最小公倍数 int LCM(int a,int b) { re ...
- poj 3177&&poj 3352加边构双联通(有重边)用tarjan 模板求的
#include<stdio.h>/* 求边双联通分量和求强连通差不多,先缩点求出叶子节点的个数 */ #include<string.h> #define N 5100 st ...
随机推荐
- 定时器TIM,pwm
一.定时器 1. 定义 设置等待时间,到达后则执行指定操作的硬件. 2. STM32F407的定时器有以下特征 具有基本的定时功能,也有PWM输出(灯光控制.电机的转速).脉冲捕获功能( ...
- 国庆集训Day1
T1 divide 题意: 有\(n\)个数 \(a_1, a_2,..., a_n\) 有m个数\(b_1, b_2,..., b_n\) 令\(a = a_1\times a_2\,\times ...
- bus error(总线错误)
转自 http://blog.csdn.net/todd911/article/details/8813321 在<C专家编程>中提到了总线错误bus error(core dumped) ...
- rtp发送 h265
自己写的select 做TCP服务端,把tcp数据按照RTSP协议解析,掉函数直接获取一帧音频,一帧视频这种,分包成RTP发送 用ffmpeg
- redis详解之cluster模式部署
一.环境说明 1.Operation OS:CentOS7.22.ruby version >= 2.2.23.openssl zlib gcc>=4.8.5 二.开始部署 1.安装rub ...
- elasticsearch _all
在轻量搜索中,我们介绍了 _all 字段:一个把其它字段值 当作一个大字符串来索引的特殊字段. query_string 查询子句(搜索 ?q=john )在没有指定字段时默认使用 _all 字段._ ...
- Java并发指南16:JUC中常用的Unsafe和Locksupport
原创文章,转载请注明: 转载自并发编程网 – ifeve.com 1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个 ...
- Flume-数据流监控 Ganglia
Ganglia 由 gmond.gmetad 和 gweb 三部分组成. gmond(Ganglia Monitoring Daemon)是一种轻量级服务,安装在每台需要收集指标数据的节点主机上.使用 ...
- Sublime Text 全局搜索Ctrl+Shift+F快捷键不能用
Sublime Text 全局搜索Ctrl+Shift+F快捷键不能用 和微软输入法的简繁体切换冲突了,关闭输入法的简繁体切换快捷键就好了! 文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢 ...
- 解决阿里云轻量级服务器mysql无法用数据库操作软件连接
第一步:去阿里云购买一台轻量应用服务器Lamp然后登录到控制台点击应用详情 点击后你可以看到一些服务器的数据 首先是访问服务器的首页地址,默认会放一个html文件在网站根目录下(即/home/www/ ...