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 ...
随机推荐
- 如何为Apache JMeter开发插件(二)—第一个JMeter插件
文章内容转载于:http://lib.csdn.net/article/softwaretest/25700,并且加上个人一些截图 本篇将开启为JMeter开发插件之旅,我们选择以Function(函 ...
- 分类--ROC 和曲线下面积
ROC 曲线(接收者操作特征曲线)是一种显示分类模型在所有分类阈值下的效果的图表.该曲线绘制了以下两个参数: 真正例率 假正例率 真正例率 (TPR) 是召回率的同义词,因此定义如下: $$TPR = ...
- php-fpm添加service服务
原文:http://blog.csdn.net/whatday/article/details/50659992 php-fpm在5.3.2版本以后不支持service php-fpm start等命 ...
- c#关闭excel进程失败的解决方法
解决方法如下: 1.运行命令dcomcnfg -32,打开组件服务 2.找到execl服务,属性中设置交互式用户 2.设置用户权限 3.设置IIS权限
- hdu 1540/POJ 2892 Tunnel Warfare 【线段树区间合并】
Tunnel Warfare Time Limit: 4000/2000 MS ...
- C/C++中字符串与数字之间的转换
主要有两种方式:C 中能够使用 sprintf 将数字转为字符数组,sscanf 将字符数组转为数字:而在 C++ 中不仅能够使用 C 中的方法,还能够使用 stringstream 实现字符串与数字 ...
- laravel模型建立和数据迁移和数据填充(数据填充没有成功)未完
开始创建我们的第一个 Article 模型及其对应迁移文件了,我们在项目根目录运行如下 Artisan 命令一步到位: php artisan make:model Article -m -m 是 - ...
- 写sql语句统计各个学生各科成绩(case when用法)
尊重原创:http://blog.csdn.net/love_java_cc/article/details/78268326 有如下一张表score: 建表语句: CREATE TABLE `sco ...
- jquery的on()
定义和用法 on() 方法在被选元素及子元素上添加一个或多个事件处理程序. 自 jQuery 版本 1.7 起,on() 方法是 bind().live() 和 delegate() 方法的新的替代品 ...
- mock测试类的时候,添加@InjectMocks
1.在单元测试某个类的时候,引入该类的时,添加注解@InjectMocks 2.该类的变量,需要添加注解:@Mock 3.类中需要第三方协作者时,通常会用到get和set方法注入.通过spring框架 ...