HihoCoder 1195 高斯消元·一(高斯消元)
题意
https://hihocoder.com/problemset/problem/1195
思路
高斯消元是解决高元方程的一种算法,复杂度 \(O(n^3)\) 。
过程大致是:
- 构造一个未知数的倒三角,并维护多解标记;
- 寻找是否出现没有未知数但常数非零的式子,有则返回无解;
- 多解标记若存在则返回多解;
- 在倒三角里倒着扫一遍,解出所有未知数。
下面是代码实现:
代码
#include<bits/stdc++.h>
#define FOR(i,x,y) for(int i=(x),i##END=(y);i<=i##END;++i)
#define DOR(i,x,y) for(int i=(x),i##END=(y);i>=i##END;--i)
typedef long long LL;
using namespace std;
const int N=505;
const double eps=1e-8;
double a[2*N][N],b[2*N];
int n,m;
int Gauss(double a[2*N][N],double b[2*N],int n,int m)
{
bool flag=0;
for(int i=1,r=1;i<=n;i++,r++)
{
bool f=0;
FOR(j,r,m)if(fabs(a[j][i])>eps)
{
swap(a[j],a[r]),swap(b[j],b[r]);
f=1;break;
}
if(!f){flag=1,r--;continue;}
FOR(j,r+1,m)
{
FOR(k,i+1,n)a[j][k]-=a[r][k]*a[j][i]/a[r][i];
b[j]-=b[r]*a[j][i]/a[r][i];
a[j][i]=0;
}
}
FOR(i,1,m)if(fabs(b[i])>eps)
{
bool f=0;
FOR(j,1,n)if(fabs(a[i][j])>eps){f=1;break;}
if(!f)return 0;
}
if(flag)return -1;
DOR(i,n,1)
{
FOR(j,i+1,n)b[i]-=a[i][j]*b[j];
b[i]/=a[i][i];
a[i][i]=1;
}
return 1;
}
int main()
{
scanf("%d%d",&n,&m);
FOR(i,1,m)
{
FOR(j,1,n)scanf("%lf",&a[i][j]);
scanf("%lf",&b[i]);
}
int res=Gauss(a,b,n,m);
if(res==-1)puts("Many solutions");
else if(res==0)puts("No solutions");
else FOR(i,1,n)printf("%d\n",(int)(b[i]+0.5));
return 0;
}
HihoCoder 1195 高斯消元·一(高斯消元)的更多相关文章
- 高斯消元(Gauss消元)
众所周知,高斯消元可以用来求n元一次方程组的,主要思想就是把一个n*(n+1)的矩阵的对角线消成1,除了第n+1列(用来存放b的)的其他全部元素消成0,是不是听起来有点不可思议??! NO NO NO ...
- hihoCoder 1195 高斯消元.一
传送门 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:喂不得了啦,那边便利店的薯片半价了! 小Hi:啥?! 小Ho:那边的便利店在打折促销啊. 小Hi:走走走, ...
- hihoCoder #1195 高斯消元·一
题意:便利店老板为了促销,推出了组合包的形式,将不同数量的各类商品打包成一个组合.比如2袋薯片,1听可乐的组合只要5元,而1袋薯片,2听可乐的组合只要4元.通过询问老板知道:一共有N种不同的商品和M种 ...
- while:1.兔子生兔子问题 2.打印菱形 3.求100以内质数的和4.洗发水15元一瓶,牙膏5元一支,香皂2元一块,150元刚好花完
1.兔子生兔子问题: 2.打印菱形 3.求100以内质数的和 4.洗发水15元一瓶,牙膏5元一支,香皂2元一块,150元刚好花完有多少种情况?
- python 元类与定制元类
1:元类 元类:类的创建与管理者 所有类的元类是type class a: pass print(type(a)) 结果:<class 'type'> 2:定制元类 类的实例化过程:(可看 ...
- python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍
目录 python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍 一丶元祖 1.元祖简介 2.元祖变量的定义 3.元祖变量的常用操作. 4.元祖的遍历 5.元祖的应用场景 p ...
- Metaspace 之一:Metaspace整体介绍(永久代被替换原因、元空间特点、元空间内存查看分析方法)
回顾 根据JVM内存区域的划分,简单的画了下方的这个示意图.区域主要分为两大块,一块是堆区(Heap),我们所New出的对象都会在堆区进行分配,在C语言中的malloc所分配的方法就是从Heap区获取 ...
- [转]深刻理解Python中的元类(metaclass)以及元类实现单例模式
使用元类 深刻理解Python中的元类(metaclass)以及元类实现单例模式 在看一些框架源代码的过程中碰到很多元类的实例,看起来很吃力很晦涩:在看python cookbook中关于元类创建单例 ...
- 多么痛的领悟---关于RMB数据类型导致的元转分分转元的bug
关于金额的数据类型,以及元转分分转元之间这种转换,以及元和分的比较,我相信很多人都踩过坑. 反正我是踩过. 而且,昨天和今天又重重的踩了两脚. 代付查询接口,支付中心给溢+响应的报文里,amount的 ...
随机推荐
- jQuery选择器--#id、element和.class
#id 描述 根据给定的ID匹配一个元素.使用任何的元字符作为名称的文本部分, 它必须被两个反斜杠转义:\\ 参数 id 用于搜索的,通过元素的 id 属性中给定的值 element 概述 根 ...
- 【2017-2-20】C#运算符
运算符分类: 1.算术运算符 ⑴+ - * / %(取余,模) /3; Console.Write(d); Console.ReadLine(); 则输出结果为“3”,因为10和3都是int型,dec ...
- Spring 知识点提炼-转
https://www.cnblogs.com/baizhanshi/p/7717563.html 1. Spring框架的作用 轻量:Spring是轻量级的,基本的版本大小为2MB 控制反转:Spr ...
- python colorama模块
colorama是一个python专门用来在控制台.命令行输出彩色文字的模块,可以跨平台使用. 1. 安装colorama模块 pip install colorama 可用格式常数: Fore: B ...
- WordConuts
import java.io.File; import java.io.FileNotFoundException; import java.util.HashMap; import java.uti ...
- CentOS7安装MySQL冲突和问题解决小结
摘自:https://blog.csdn.net/typa01_kk/article/details/49059729 问题1: [root@localhost install-files]# rpm ...
- 计算概论(A)/基础编程练习2(8题)/6:数组逆序重放
#include<stdio.h> int main() { // 输入n个整数 ; scanf("%d", &n); // 循环读入元素 while(scan ...
- 如何获取STM32 MCU的唯一ID及应用(转)
源: 如何获取STM32 MCU的唯一ID
- 2019/3/25 wen 包,对象的行为
- P3369 【模板】普通平衡树(splay)
P3369 [模板]普通平衡树 就是不用treap splay板子,好好背吧TAT #include<iostream> #include<cstdio> #include&l ...