【Luogu】P3389高斯消元模板(矩阵高斯消元)
高斯消元其实是个大模拟qwq
所以就着代码食用
首先我们读入
for(int i=;i<=n;++i)
for(int j=;j<=n+;++j) scanf("%lf",&s[i][j]);
读入肯定没什么问题(不过我在这卡了一分多钟)
然后我们要进行消元操作
所谓消元操作其实就是对于输入的矩阵
比如说
9 3 2 2
1 4 7 3
1 3 4 5
进行一番乱搞,使得第当前枚举的(比如说枚举第i行第i列)s[i][j]系数变成1。
实际上就是整行同除qwq
比如我们除完第一行第一列的之后,矩阵就变成这样
1 0.33 0.22 0.22
1 4 7 3
1 3 4 5
这样,然后把其他行的这个元消掉
1 0.33 0.22 0.22
0 3.67 6.78 2.78
0 2.67 3.78 3.78
这样子。
然后接着去消下一行的元。
最后我们可以得到一个阵列
1.00 0.33 0.22 0.22
0.00 1.00 1.85 0.76
0.00 0.00 1.00 -2.39
观察到最后一行表示的方程式,xn=-2.39
然后可以解出上一行的xn-1
然后一直往回带就好了
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cctype>
#include<cstring>
#include<cmath>
#define Exit {printf("No Solution"); return 0; }
using namespace std; inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} double s[][];
double ans[]; int main(){
int n=read();
for(int i=;i<=n;++i)
for(int j=;j<=n+;++j) scanf("%lf",&s[i][j]);
for(int i=;i<=n;++i){
int now=i;
if(!s[i][i]) Exit;
for(int j=now;j<=n;++j)
if(fabs(s[j][i])>fabs(s[now][i])) now=j;
if(now!=i) swap(s[i],s[now]);
double div=s[i][i];
for(int j=i;j<=n+;++j) s[i][j]/=div;
for(int j=i+;j<=n;++j){
double ret=s[j][i];
for(int k=i;k<=n+;++k){
s[j][k]-=ret*s[i][k];
}
}
}
ans[n]=s[n][n+];
for(int i=n-;i;--i){
double now=;
for(int j=i+;j<=n;++j) now+=ans[j]*s[i][j];
ans[i]=s[i][n+]-now;
}
for(int i=;i<=n;++i) printf("%.2lf\n",ans[i]);
return ;
}
【Luogu】P3389高斯消元模板(矩阵高斯消元)的更多相关文章
- Luogu P3389 高斯消元
https://www.luogu.com.cn/problem/P3389 主元消元法[模板] 高斯消元是解决多元线性方程组的方法,再学习它之前,先引入一个东西--行列式 行列式的性质: 这里我们只 ...
- 高斯消元模板!!!bzoj1013
/* 高斯消元模板题 n维球体确定圆心必须要用到n+1个点 设圆心坐标(x1,x2,x3,x4...xn),半径为C 设第i个点坐标为(ai1,ai2,ai3,,,ain)那么对应的方程为 (x1-a ...
- HDU 3359 高斯消元模板题,
http://acm.hdu.edu.cn/showproblem.php?pid=3359 题目的意思是,由矩阵A生成矩阵B的方法是: 以a[i][j]为中心的,哈曼顿距离不大于dis的数字的总和 ...
- 【转】高斯消元模板 by kuangbin
写的很好,注释很详细,很全面. 原blog地址:http://www.cnblogs.com/kuangbin/archive/2012/09/01/2667044.html #include< ...
- 洛谷-P3389-高斯消元模板
链接: https://www.luogu.org/problem/P3389 题意: 给定一个线性方程组,对其求解 思路: 高斯消元,从第一项消到最后一项,消成一个上三角矩阵.再从最后一项依次向上回 ...
- 【线性代数】2-3:消元与矩阵的关系(Elimination and Matrix)
title: [线性代数]2-3:消元与矩阵的关系(Elimination and Matrix) toc: true categories: Mathematic Linear Algebra da ...
- Gauss消元模板
; //高斯消元模板 //----------------------------------------------------------------------------------- //把 ...
- OpenJudge计算概论-矩阵归零消减序列和
矩阵归零消减序列和 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个n*n的矩阵( <= n <= ,元素的值都是非负整数).通过n-1次实施下述过程,可把这个矩阵转 ...
- Java开发中经典的小实例-( 鸡蛋0.1元一个,鸭蛋3元一个,鹅蛋6元一个。求一百元买一百个蛋。)
public class Test24 { public static void main(String[] args) { // 鸡蛋0.1元一个,鸭蛋3元一个,鹅蛋6元一个.求 ...
随机推荐
- java.lang.ClassCastException: com.ch.hibernate.Student_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy
利用query动态查询时,报错 java.lang.ClassCastException: com.ch.hibernate.Student_$$_javassist_0 cannot be cast ...
- 融云SDK触达用户数破20亿 王者风范双倍展现
11月1日,融云SDK触达用户数突破20亿,业务增长速度及用户覆盖量再创即时通讯云领域新高.自去年11月10日公布SDK触达用户数破10亿以来,融云仅用了一年时间,便取得了触达用户数翻倍的成绩,迅猛的 ...
- Ubuntu18.04如何从英文界面更改为中文界面
本文介绍如何将Ubuntu18.04安装后的英文界面,更改为中文界面,即系统语言由英文改为简体中文.注意,与安装中文输入法不同,两者也没有冲突. 首先进入设置(Setting),选择区域和语言(Reg ...
- 用函数求lnx,lgx等
https://blog.csdn.net/liujian20150808/article/details/50628061
- ubuntu 使用apt命令时报错 E: Could not get lock /var/lib/dpkg/lock - open...
问题描述: 刚刚安装好Ubuntu16.04.使用apt命令时,提示报错信息: abc@pc:~$ sudo apt-get install openssh-server E: Could not g ...
- JavaScript操作DOM
1.DOM对象简介: 什么是DOM:(Document Object Model) 译为文档对象模型,是 HTML 和 XML 文档的编程接口. 2.DOM HTML 节点树:指的是DOM中为操作 ...
- Java基础面试操作题: 线程问题,写一个死锁(原理:只有互相都等待对方放弃资源才会产生死锁)
package com.swift; public class DeadLock implements Runnable { private boolean flag; DeadLock(boolea ...
- ES6学习总结 (二)
一:ES6为函数做了哪些扩展 参数的默认值 传统写法: function person(n,a){ var name =n || "zhangsan"; var age = a | ...
- 设置通过Maven创建的工程的JDK的版本,更改conf/settings.xml
eclipse提示警告如下: Build path specifies execution environment J2SE-1.5. There are no JREs installed in t ...
- pandas处理大文本数据
当数据文件是百万级数据时,设置chunksize来分批次处理数据 案例:美国总统竞选时的数据分析 读取数据 import numpy as np import pandas as pdfrom pan ...