P2455 [SDOI2006]线性方程组
真\(\cdot\)高斯消元模板题
由于各种hack数据被造出来~码量突增~,其实也就多了二三十行
将每行系数消到最多有一个非0数
特殊情况:
在过程同时
没有这元了,则表示有无穷解
发现一行系数都为0,但函数值不为0,则表示无解
最后要注意的是,无穷解的前提是有解
#include <iostream>
#include <algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<vector>
using namespace std;
typedef long long LL;
const double eps=1e-8;
double xs[55][55],ans[55];
int n,m,i,j,k;
bool f1=0,f2=0;
inline 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<<3)+(x<<1)+c-'0',c=getchar();
return x*f;
}
int main(){
n=Read();
for(LL i=1;i<=n;i++)
for(LL j=1;j<=n+1;j++)
xs[i][j]=(double)Read();
LL c=1;
for(LL i=1;i<=n;i++){
if(c>n)//每个元都消过了
break;
for(LL j=i;j<=n;++j)
if (abs(xs[j][c])>abs(xs[i][c]))
for(LL k=1;k<=n+1;++k)
swap(xs[i][k],xs[j][k]);
if (fabs(xs[i][c])<eps){//没有该元
f2=1;//无穷解
c++;
i--;//这行消下一元
continue;
}
for(LL j=i+1;j<=n;++j){
double t=xs[j][c]/xs[i][c];
for(LL k=c;k<=n+1;++k)
xs[j][k]-=xs[i][k]*t;
}//消掉
c++;
}
c=n;
for(LL i=n;i>=1;--i){
if(c<1)
break;
if(abs(xs[i][c])<eps)//没有该元
continue;
for(LL j=1;j<=i-1;++j){
double t=xs[j][c]/xs[i][c];
for(LL k=c;k<=n+1;++k)
xs[j][k]-=xs[i][k]*t;
}//其他地方消掉 且不只是改变函数值
c--;
}
for(LL i=n;i>=1;--i){
f1=0;
for(LL j=1;j<=n;++j)
if(fabs(xs[i][j])>eps)
f1=1;
if(f1==0&&fabs(xs[i][n+1])>eps){
puts("-1");
return 0;
}//系数为0 函数值不为0
if(fabs(xs[i][i])>eps)
if (!f2)
ans[i]=xs[i][n+1]/xs[i][i];
}
if (f2==1){
puts("0");
return 0;
}
for(LL i=1;i<=n;++i)
if(fabs(ans[i])<eps)
printf("x%d=0\n",i);
else
printf("x%lld=%.2lf\n",i,ans[i]);
return 0;
}
P2455 [SDOI2006]线性方程组的更多相关文章
- P2455 [SDOI2006]线性方程组(real gauss)
P2455 [SDOI2006]线性方程组 (upd 2018.11.08: 这才是真正的高斯消元模板) 找到所消未知数(设为x)系数最大的式子,把它提上来 把这个式子的 x 系数约成1 把这个式子用 ...
- 【luogu P2455 [SDOI2006]线性方程组】 题解
题目链接:https://www.luogu.org/problemnew/show/P2455 无解:最后一列对应元素不为0,前面全是0. 无穷解:一行全是0. 嗯...在消元过程中不要直接拿矩阵元 ...
- Luogu P2455 [SDOI2006]线性方程组 真•高斯消元板子
果然如Miracle学长所说...调了一天...qwq..还是过不了线下的Hack upd after 40min:刚刚过了 就是多了一个判无解的操作... 当系数都为0,且常数项不为0时,即为无解. ...
- 洛谷P2455 [SDOI2006]线性方程组(高斯消元)
题目描述 已知n元线性一次方程组. 其中:n<=50, 系数是[b][color=red]整数<=100(有负数),bi的值都是整数且<300(有负数)(特别感谢U14968 mmq ...
- 洛谷P2455 [SDOI2006]线性方程组
高斯消元模板 要求输出解的情况(无穷解/无解) 1. 之前写的丑陋代码 #include <iostream> #include <cstdio> #include <c ...
- [SDOI2006] 线性方程组
洛谷 P2455 传送门 刚开始写了个消成上三角的,结果狂wa. 后来经过研究发现,消成上三角那种不能直接判断无解或无穷多解,需要其它的操作. 所以干脆学了个消成对角线的,写了一发A了. 其实两种消元 ...
- luogu2455 [SDOI2006]线性方程组 高斯消元法
#include <iostream> #include <cstdio> #include <cmath> using namespace std; int n, ...
- [Luogu2455] [SDOI2006]线性方程组
题目描述 已知n元线性一次方程组. 其中:n<=50, 系数是[b][color=red]整数<=100(有负数),bi的值都是整数且<300(有负数)(特别感谢U14968 mmq ...
- Luogu2455 [SDOI2006]线性方程组 (高斯消元)
模板特殊情况没exit(0) $\longrightarrow$60 了一下午 //#include <iostream> #include <cstdio> #include ...
随机推荐
- Jenkins安装火线fireline插件
原文请访问:http://magic.360.cn/zh/user.html 提示:如果您是第一次使用Jenkins,请先前往文章[Jenkins下载安装配置教程] 1. 点击左上角的`Jenkins ...
- LeetCode 第 342 题(Power of Four)
LeetCode 第 342 题(Power of Four) Given an integer (signed 32 bits), write a function to check whether ...
- Qt Creator中增加新的ui文件时报错
原因分析:moc_开头的文件编译过程中没有又一次生成导致. 解决的方法:删除编译产生的build目录.又一次编译就可以. 错误类型截图例如以下: 这个问题的解决.使得能够在不论什么时候都能够在proj ...
- php里面用魔术方法和匿名函数闭包函数动态的给类里面添加方法
1.认识 __set (在给不可访问属性赋值时,__set() 会被调用) 也就是说你再访问一个类里面没有的属性,会出发这个方法 class A{ private $aa = '11'; publ ...
- 详细解读:远程线程注入DLL到PC版微信
一.远程线程注入的原理 1.其基础是在 Windows 系统中,每个 .exe 文件在双击打开时都会加载 kernel32.dll 这个系统模块,该模块中有一个 LoadLibrary() 函数,可以 ...
- shiro设置session超时
通过api:Shiro的Session接口有一个setTimeout()方法 //登录后,可以用如下方式取得session SecurityUtils.getSubject().getSession( ...
- 在Ubuntu下利用Eclipse开发FFmpeg配置小结
首先需要编译FFmpeg得到头文件和lib文件,参见:在Ubuntu下编译FFmpeg 选择File-New-C Project 选择Executable下的Empty Project,右侧选择Lin ...
- 嵌入式开发之qt socket--- qt 封装的socket demo
http://wuyuans.com/2013/03/qt-socket/ http://blog.chinaunix.net/uid-22480862-id-388253.html
- 最小生成树——Kruskal(克鲁斯卡尔)算法
[0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 Kruskal(克鲁斯卡尔)算法 的idea 并用 源代码加以实现: 0.2)最小生成树的基础知识,参见 ...
- windows上mysql安装
1. 下载MySQL Community Server 5.7.14 Index of /MySQL/Downloads/MySQL-Cluster-7.1 2. 解压MySQL压缩包 安装路径:E: ...