zoukankan      html  css  js  c++  java
  • luogu2455 [SDOI2006]线性方程组

    题目链接

    solution

    高斯消元模板。

    特别的地方在于判断无解和无穷解。

    无解就是出现前面全是0,最后一个为0.

    无穷解就是一列全是0。

    先判断无解,在判断无穷解

    一开始看很多人在这里踩坑,还暗自窃喜自己想到了

    然鹅还是踩了好几次坑。

    一定要在高斯消元之后判断是否无解!!!!

    一定要先判断是不是无解!!!

    code

    /*
    * @Author: wxyww
    * @Date:   2020-04-27 09:07:38
    * @Last Modified time: 2020-04-27 09:57:23
    */
    #include<cstdio>
    #include<iostream>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<vector>
    #include<ctime>
    using namespace std;
    typedef long long ll;
    const int N = 60;
    ll read() {
    	ll x = 0,f = 1;char c = getchar();
    	while(c < '0' || c > '9') {
    		if(c == '-') f = -1; c = getchar();
    	}
    	while(c >= '0' && c <= '9') {
    		x = x * 10 + c - '0'; c = getchar();
    	}
    	return x * f;
    }
    double a[N][N];
    int n,FLAG;
    void NoSolution() {
    	for(int i = 1;i <= n;++i) {
    		int flag = 0;
    		for(int j = 1;j <= n;++j) {
    			if(fabs(a[i][j]) > 1e-8) {
    				flag = 1;break;
    			}
    		}
    		if(!flag && fabs(a[i][n + 1]) > 1e-8) {puts("-1");exit(0);}
    		else if(!flag) {FLAG = 1;}
    	}
    	// puts("0");exit(0);
    }
    void Guass() {
    
    	for(int i = 1;i <= n;++i) {
    		int k = i;
    		for(int j = i + 1;j <= n;++j) 
    			if(a[j][i] > a[k][i]) k = j;
    	
    		if(fabs(a[k][i]) <= 1e-8) continue;
    
    		swap(a[k],a[i]);
    
    		for(int j = 1;j <= n;++j) {
    			if(i == j) continue;
    			double tmp = a[j][i] / a[i][i];
    			// cout<<tmp<<endl;
    			for(int t = i;t <= n + 1;++t) {
    				a[j][t] -= a[i][t] * tmp;
    			} 
    		}
    	}
    }
    
    int main() {
    	n = read();
    	for(int i = 1;i <= n;++i)
    		for(int j = 1;j <= n + 1;++j)
    			a[i][j] = read();
    
    	Guass();
    	NoSolution();
    	if(FLAG) {
    		puts("0");return 0;
    	}
    	for(int i = 1;i <= n;++i)
    		printf("x%d=%.2lf
    ",i,a[i][n + 1] / a[i][i]);
    	return 0;
    }
    
  • 相关阅读:
    进入正在运行的Docker的asp.net core容器
    EF 更新记录发现外键更改但更新又跳回以前值
    远程获取http数据和提交数据
    C# 32位16进制加密
    netcore命令行运行程序
    MD5加密32位16进制
    C# MD5加密32位16进制有时少一位问题
    netcoreMVC中使用Vue模板分页封装(不适合数据量大)
    Vue组件间传值 和 访问
    jenkins部署安装
  • 原文地址:https://www.cnblogs.com/wxyww/p/bzoj2455.html
Copyright © 2011-2022 走看看