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的 ...
随机推荐
- mysql运用now(3)存储时间到毫秒
) from DUAL;
- 第三方包源码maven 下载
1,maven导包时候自动下载源码 在eclipse或者Myeclipse中 => window ==> preference ==> Maven ==> 勾选Download ...
- Redis 的 5 个常见应用场景
前言Redis 是一个强大的内存型存储,具有丰富的数据结构,使其可以应用于很多方面,包括作为数据库.缓存.消息队列等等. 如果你的印象中Redis只是一个 key-value 存储,那就错过了Redi ...
- Django 自定义
from django.db import models class MyCharfield(models.Field): def __init__(self,max_length,*args,**k ...
- python使用SAX解析xml
python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件 在python中使用sax方式处理xml要先引入xml.s ...
- git push跳过用户名和密码认证配置教程
在使用git commit命令将修改从暂存区提交到本地版本库后,只剩下最后一步将本地版本库的分支推送到远程服务器上对应的分支了,如果不清楚版本库的构成,可以查看我的另一篇,git 仓库的基本结构. 新 ...
- sudo: apt-get: command not found
apt-get是debian(Ubuntu)才有的包管理器,而在Apple 的OS X系统中是没有的. brew(全称Homebrew)是Mac OSX上的软件包管理工具,能在Mac中方便的安装软件或 ...
- QMenu 设置菜单图标 & 生成菜单树
效果图 源码 .h 文件 protected slots: void onMenuTriggered(QAction*); .cpp 文件 // 菜单 QMenu *pMenu = new QMenu ...
- Django里自定义用户登陆及登陆后跳转到登陆前页面的实现
def logout(request): request.session.flush() return HttpResponseRedirect(request.META.get('HTTP_REFE ...
- python分割txt文件
a=open('A.txt','r').readlines() n=3 #份数 qty=len(a)//n if len(a)%n==0 else len(a)//n+1 #每一份的行数 for i ...