热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

洛谷P2455[SDOI2006]线性方程组(高斯消元)

题目描述已知n元线性一次方程组。其中:n<50,系数是[b][colorred]整数<100(有负数),bi的值都是整数且<300(有负数)(特别感谢U14968

题目描述

已知n元线性一次方程组。

其中:n<=50, 系数是[b][color=red]整数<=100(有负数),bi的值都是整数且<300(有负数)(特别感谢U14968 mmqqdd提出题目描述的说明)(redbag:是mqd自己要我写的= =)[/color][/b].

编程任务:

根据输入的数据,编程输出方程组的解的情况。

输入输出格式

输入格式:

 

第一行:未知数的个数。以下n行n+1列:分别表示每一格方程的系数及方程右边的值。

 

输出格式:

 

如果方程组无实数解输出-1;

如果有无穷多实数解,输出0;

如果有唯一解,则输出解(小数点后保留两位小数)。

 

输入输出样例

输入样例#1:  复制
3
2 -1 1 1
4 1 -1 5
1 1 1 0
输出样例#1:  复制
x1=1.00
x2=0
x3=-1.00

 

 

 

裸的高斯消元

不过这题真的是,往死里卡精度。。

注意先判无解,再判无穷

// luogu-judger-enable-o2
#include
#include
const double eps = 1e-9;
inline int read() {
    char c = getchar(); int x = 0, f = 1;
    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;
}
const int MAXN = 101;
int N;
double a[MAXN][MAXN];
double Ans[MAXN];
double fabs(double x) {return x <0 ? -x : x;}
void Gauss() {
    for(int i = 1; i <= N; i++) {
        int mx = i;
        for(int j = i + 1; j <= N; j++) 
            if(fabs(a[j][i]) > fabs(a[mx][i])) mx = j;
        if(mx != i) std::swap(a[mx], a[i]);
        if(fabs(a[i][i]) >= eps)
            for(int j = 1; j <= N; j++) {
                if(i == j) continue;
                double temp = a[j][i] / a[i][i];
                for(int k = 1; k <= N + 1; k++)
                    a[j][k] -= temp * a[i][k];
            }
    }
    int NoSolution = 0, ManySolution = 0;
    for(int i = 1; i <= N; i++) {
        int num = 0;
        for(int j = 1; j <= N + 1; j++) 
            if(a[i][j] == 0) num ++;
            else break;
        if(num == N + 1) ManySolution = 1;
        if(num == N && a[i][N+1] != 0) NoSolution = 1;
    }
    if(NoSolution) {printf("-1");return ;}
    if(ManySolution) {printf("0");return ;}
    for(int i = N; i >= 1; i--) {
        Ans[i] = a[i][N+1] / a[i][i];
        for(int j = i; j >= 1; j--)
            a[j][N+1] -= a[j][i] * Ans[i];
    }
    for(int i = 1; i <= N; i++)
        printf("x%d=%.2lf\n",i,Ans[i]);
}
int main() {
    #ifdef WIN32
    freopen("a.in", "r", stdin);
    #endif
    N = read();
    for(int i = 1; i <= N; i++)
        for(int j = 1; j <= N + 1; j++)
            a[i][j] = read();
    Gauss();
    return 0;
}

 


推荐阅读
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 本文介绍了C函数ispunct()的用法及示例代码。ispunct()函数用于检查传递的字符是否是标点符号,如果是标点符号则返回非零值,否则返回零。示例代码演示了如何使用ispunct()函数来判断字符是否为标点符号。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
author-avatar
diudiu不是狗
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有