[WIKIOI1975]化学方程式(字符串处理+线性方程组)
2013-05-18 10:23
218 查看
题目描述 Description
化学方程式是个很烦人的东西, 不仅背起来很麻烦, 连配平都是很麻烦的事情.举例说, 铜和浓硝酸生成硝酸铜, 水和二氧化氮. 铜的化学式是Cu, 硝酸是HNO3, 硝酸铜是Cu(NO3)2,
二氧化氮是NO2, 水是H2O.
则这个式子简单写起来就是Cu+HNO3→Cu(NO3)2+NO2↑+H2O.
但是仔细观察可以看到, 硝酸根在反应前只有一个, 但是反应后却出现了两个, 而且反应前氢原子只有一个, 而反应后氢原子却有两个. 所以为了客观描述, 我们需要在两侧加上系数, 使得反应前后原子总数不变.
加上系数之后是Cu+4HNO3=Cu(NO3)2+2NO2↑+2H2O.
这个算是个比较好配平的式子, 如果若是铜和稀硝酸呢? 已知铜和稀硝酸生成硝酸铜, 水和一氧化氮. 铜的化学式是Cu, 硝酸是HNO3, 硝酸铜是Cu(NO3)2,
一氧化氮是NO, 水是H2O. 未配平就是Cu+HNO3→Cu(NO3)2+NO↑+H2O.
然后配平之后就是3Cu+8HNO3=3Cu(NO3)2+2NO↑+4H2O.
现在请你给一个化学方程式进行配平, 如果无法配平, 请输出“Error”.
注意, 一个方程式有无限种配平的可能性, 要求输出时全部系数的最小公因数为1.
题目保证有机化合物会写成最简式, 例如乙醇不会写成C2H5OH而会写成C2H6O,
但是像碱式碳酸铜依然会写成Cu2CO3(OH)2而不会合并为Cu2CH2O5.
即原子团不会被拆开.
输入描述 Input Description
第1行为2个正整数NRea和NPro,表示反应物的种类数和生成物的种类数.
第2~NRea+1行每行包含1个字符串. 第i行表示每种反应物的化学式Reai,
其中只可能包含大写或者小写英文字母, 括号和数字. 保证第一个字符一定是字母, 如果某个元素代表的字母后面包括一个数字则表示有该数字个的该元素, 如果括号后面出现数字则表示该离子团或者官能团有该字母个.
第NRea+2~NRea+NPro+1行行每行包含有1个字符串.
第i行的字符串表示该生成物的化学式Proi.
输出描述 Output Description
1个完整的字符串, 代表化学方程式, 无需添加反应条件, 中间使用西文半角等号. 中间的各个物质按照输入顺序输出.样例输入 Sample Input
【输入样例1】2 3
Cu
HNO3
Cu(NO3)2
NO
H2O
【输入样例2】
4 3
H2S
K2Cr2O7
H2SO4
Cr2(SO4)3
K2SO4
S
H2O
【输入样例3】
1 2
H2O2
H2O
H2
【输入样例4】
1 3
KMnO4
K2MnO4
MnO2
O2
样例输出 Sample Output
【输出样例1】3Cu+8HNO3=3Cu(NO3)2+2NO+4H2O
【输出样例2】
3H2S+K2Cr2O7+4H2SO4=Cr2(SO4)3+K2SO4+3S+7H2O
【输出样例3】
Error
【输出样例4】
2KMnO4=K2MnO4+MnO2+O2
数据范围及提示 Data Size & Hint
1≤NRea, NPro≤100; 1≤Length(Reai)≤20.题目不保证数据中的化学反应一定可以发生或者符合客观事实.
题目中涉及的化学元素有:
H, He, Li, Be, B, C, N, O, F, Ne, Na, Mg, Al, Si, P, S, Cl, Ar, K, Ca,
Sc, Ti, V, Cr, Mn, Fe, Co, Ni, Cu, Zn, Ga, Ge, As, Se, Br, Kr, Rb, Sr, Y, Zr,
Nb, Mo, Tc, Ru, Rh, Pd, Ag, Cd, In, Sn, Sb, Te, I, Xe, Cs, Ba, La, Ce, Pr, Nd,
Pm, Sm, Eu, Gd, Tb, Dy, Ho, Er, Tm, Yb, Lu, Hf, Ta, W, Re, Os, Ir, Pt, Au, Hg,
Tl, Pb, Bi, Po, At, Rn, Fr, Ra, Ac, Th, Pa, U, Np, Pu, Am, Cm, Bk, Cf, Es, Fm,
Md, No, Lr, Rf, Db, Sg, Bh, Hs, Mt, Ds, Rg, Cn.
还没AC, 不过快了, 这道题就是烦.
相关文章推荐
- 字符串处理函数的用法案例
- (原创)SQL Server中几种特殊的“字符串到列表”的处理函数
- Linux内置字符串处理
- php 误把字符串当作数组处理时
- LINQ字符串向datetime 转换时失败的处理方法
- 超长字符串换行处理
- IOS_Swift_字符串的处理
- python中的字符串处理
- 字符串处理
- 对于服务器返回的JSON字符串,如果 jQuery 异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理
- Codeforces VK Cup 2012 Qualification Round 1 /158C (字符串处理)
- 字符串处理(String)
- Linux C编程章节三:字符串处理函数
- JavaScript 使用对象处理100万个字符串拼接16s
- sap abap 字符串处理
- Codeforces Round #186 (Div. 2) / 313B Ilya and Queries (字符串处理)
- html页面post json字符串到asp.net 接收并处理
- Javascript ParseInt() IE7 IE8处理0开头字符串异常
- 字符串处理
- hdu 1228 A+B 字符串处理 超级大水题