题解 \(by\;zj\varphi\)

高斯消元

根据高中化学知识,求解方程的就是一直方程凑出来的,焓值也一样

那么对于要求的方程和一直方程,我们做一次高斯消元,以每个物质为未知数,因为它保证有解,所以消完元后,求解方程的各项系数一定为 \(0\) 代表我们凑出这个方程了,最后答案就是求出来的值的相反数

读入时用 \(hash\) 和 \(map\) 都行,输出时要特判 \(0.0\)

Code
#include<bits/stdc++.h>
#define ri register signed
#define p(i) ++i
using namespace std;
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
#define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++
template<typename T>inline void read(T &x) {
ri f=1;x=0;register char ch=getchar();
while(ch<'0'||ch>'9') {if (ch=='-') f=0;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
x=f?x:-x;
}
}
using IO::read;
namespace nanfeng{
#define FI FILE *IN
#define FO FILE *OUT
template<typename T>inline T cmax(T x,T y) {return x>y?x:y;}
template<typename T>inline T cmin(T x,T y) {return x>y?y:x;}
typedef double db;
static const int N=2e3+7;
static const db eps=1e-8;
map<string,db> mp[N],cl;
int n,cnt;
db H[N],mat[N][N],tmp;
string ts,al[N];
inline db Gauss() {
for (ri i(1);i<=n&&i<=cnt;p(i)) {
int k=i;
for (ri j(i+1);j<=n;p(j))
if (fabs(mat[k][i])<fabs(mat[j][i])) k=j;
if (k!=i) swap(mat[k],mat[i]);
for (ri j(1);j<=n+1;p(j)) {
if (i==j) continue;
db tp=mat[j][i]/mat[i][i];
for (ri l(1);l<=cnt+1;p(l))
mat[j][l]-=mat[i][l]*tp;
}
}
return -mat[n+1][cnt+1];
}//高斯约旦
inline int main() {
// FI=freopen("nanfeng.in","r",stdin);
// FO=freopen("nanfeng.out","w",stdout);
read(n);
for (ri i(1);i<=n+1;p(i)) {
while(1) {
scanf("%lf",&tmp);
cin >> ts;
if (ts[0]=='=') break;
if (cl.find(ts)==cl.end()) {al[p(cnt)]=ts;cl[ts]=1.0;}
mp[i][ts]=tmp;
cin >> ts;
if (ts[0]=='=') break;
}
while(1) {
scanf("%lf",&tmp);
cin >> ts;
if (ts[0]=='H'&&ts[1]=='=') break;
if (cl.find(ts)==cl.end()) {al[p(cnt)]=ts;cl[ts]=1.0;}
mp[i][ts]=-tmp;
cin >> ts;
if (ts[0]=='H'&&ts[1]=='=') break;
}
if (i<=n) scanf("%lf",&H[i]);
}
for (ri i(1);i<=n+1;p(i)) {
for (ri j(1);j<=cnt;p(j)) {
if (mp[i].find(al[j])!=mp[i].end())
mat[i][j]=mp[i][al[j]];
}
if (i<=n) mat[i][cnt+1]=H[i];
}
db ans=Gauss();
printf("%.1lf",fabs(ans)>eps?ans:0);
return 0;
}
}
int main() {return nanfeng::main();}

NOIP 模拟 $18\; \rm 炼金术士的疑惑$的更多相关文章

  1. NOIP 模拟 $18\; \rm 老司机的狂欢$

    题解 \(by\;zj\varphi\) 一道很有趣的题,我用的动态开点线段树和倍增 首先对于第一问,不难想到要二分,二分时间,因为时间长一定不会比时间短能跑的人多 那么如何 check,先将所有老司 ...

  2. NOIP 模拟 $18\; \rm 导弹袭击$

    题解 \(by\;zj\varphi\) 一道凸包题 对于每个导弹,它的飞行时间就是 \(tim=\frac{A}{a_i}+\frac{B}{b_i}\) 我们设 \(x=\frac{1}{a_i} ...

  3. Noip模拟18 2021.7.17 (文化课专场)

    T1 导弹袭击(数学) 显然,我们要找到最优的A,B使得一组a,b优于其他组那么可以列出: $\frac{A}{a_i}+\frac{B}{b_i}<\frac{A}{a_j}+\frac{B} ...

  4. [CSP-S模拟测试]:炼金术士的疑惑(模拟+数学+高斯消元)

    题目传送门(内部题70) 输入格式 第一行一个正整数$n$,表示炼金术士已知的热化学方程式数量.接下来$n$行,每行一个炼金术士已知的热化学方程式.最后一行一个炼金术士想要求解的热化学方程式,末尾记为 ...

  5. noip模拟18

    \(\color{white}{\mathbb{曲径通幽,星汉隐约,缥缈灯影,朦胧缺月,名之以:薄雾}}\) 放眼望去前十被我弃掉的 \(t2\) 基本都上85了-- 开考就以为 \(t2\) 是个大 ...

  6. NOIP模拟 1

    NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. #   用  户  名   ...

  7. 20190902+0903合集-NOIP模拟

    一直没时间写QwQ 于是补一下. Day 1 晚饭吃的有点恶心…… $1s\,2s\,5s$ 还开 -O2 ?? 有点恐怖. T1 猛的一想: 把外面设成一个点, 向入口连一条权为排队时间的边 从出口 ...

  8. 2021.5.22 noip模拟1

    这场考试考得很烂 连暴力都没打好 只拿了25分,,,,,,,,好好总结 T1序列 A. 序列 题目描述 HZ每周一都要举行升旗仪式,国旗班会站成一整列整齐的向前行进. 郭神作为摄像师想要选取其中一段照 ...

  9. 软件开发 [CJOJ 1101] [NOIP 模拟]

    Description 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术人员分工完成,每个技术人员完成同一软件的不同模块 ...

随机推荐

  1. CG-CTF single

    一.拖入ida,先静态分析一下 发现有三个函数,点击进去看看 a1为0时,当a2[i]为0时,将自身的值赋值到该位置,a1为0时,就不需要动. 这三个函数都是在暗示这东西是个数独,每行每列,都有1到9 ...

  2. Word转PDF的VBA脚本

    将以下内容复制粘贴在一个txt中,修改txt后缀为".vbs" On Error Resume Next Const wdExportFormatPDF = 17 Set oWor ...

  3. win10 sql2008r2网页不能使用数据,需要开启端口1433

    1.打开sql server configuratiton Manager 2.sqlserver网络配置--SQLEXPRESS的协议:都启用 3.双击TCP/IP:选择"IP地址&quo ...

  4. navicate for mysql命令中输入中文报错

    insert into xsxx(name,xb) values('李四','男') 错误提示: [SQL]insert into xsxx3(name,xb) values('李四','男') [E ...

  5. 2018年成为Web开发者的路线图

    本文通过一组大图展示了Web开发技能图谱,给出了作为Web 开发者可以采取的路径,以及总结了想要成为Web工程师的朋友们.希望和大家一起交流分享 介绍 Web 开发的角色一般说来,包括前端.后端和de ...

  6. 【论文阅读】Socially aware motion planning with deep reinforcement learning-annotated

    目录 摘要部分: I. Introduction 介绍 II. Background 背景 A. Collision Avoidance with DRL B. Characterization of ...

  7. SpringBoot通过Ajax批量将excel中数据导入数据库

    Spring Boot通过Ajax上传Excel并将数据批量读取到数据库中 适合场景:需要通过excel表格批量向数据库中导入信息 操作流程 [1]前端上传一个excel表格 [2] 后端接收这个ex ...

  8. 将已经基本完成的项目推送到gitee上管理

    1,首先在gitee上创建仓库,保留一个.gitigonore就行,这样就得到一个远程仓库地址 2,仓库有文件,那么就需要先将这个文件pull下来: 在本地的项目目录中执行:git init git ...

  9. Receiver class com.mchange.v2.c3p0.impl.NewProxyResultSet does not define or inherit an implementation of the resolved method 'abstract boolean isClosed()' of interface java.sql.ResultSet.

    背景: Mayabtis+springboot项目,连接数据库发生异常 报错内容: java.lang.AbstractMethodError: Receiver class com.mchange. ...

  10. 10分钟物联网设备接入阿里云IoT平台

    前言最近尝试了一下阿里云IoT物联网平台,还是蛮强大的.在此记录一下学习过程.本教程不需要任何外围硬件,一台电脑和一根能上网的网线即可.算是一篇Hello World了.先上效果图 第一章 准备工作1 ...