洛谷的测试数据仅供民间交流使用,非官方测试数据。官方评测链接:https://www.cspro.org/。
近日来,西西艾弗岛化学研究中心的研究员们向岛上的初中学生开展了化学科普活动。在活动中发现,初学化学的同学们十分苦恼于正确配平化学方程式。而还有一些同学,则提出了一些稀奇古怪的方程式,让研究员们帮忙配平。在配平之前,研究员们需要先判断这个方程式是否能够配平。
一个化学方程式,也叫化学反应方程式,是用化学式表示化学反应的式子。其等号左右两侧分别列举了化学反应的全部反应物和生成物。每种物质都用其化学式表示。一个物质的化学式,列举了构成该物质的各元素的原子数目。例如,水的化学式是 ,表示水分子中含有两个氢原子和一个氧原子。化学方程式中每种物质的化学式前面都有一个系数,表示参与反应或生成的物质的相对数目比例。例如,方程式 表示二分子氢气和一分子氧气反应生成二分子水。我们称一个化学方程式是配平的,是指该方程式中的反应物和生成物中,各元素原子总数目相等。例如上述方程式中,左侧氢原子、氧原子的总数目分别为 和 ,右侧氢原子、氧原子的总数目分别为 和 ,因此该方程式是配平的。
为了配平一个化学方程式,我们可以令方程式中各物质的系数为未知数,然后针对涉及的每一种元素,列出关于系数的方程,形成一个齐次线性方程组。然后求解这个方程组,得到各物质的系数。这样,我们就把化学方程式配平的问题,转化为了求解齐次线性方程组的问题。如果方程组没有非零解,那么这个方程式是不可以配平的。反之,如果方程组有非零解,我们就可能得到一个配平的方程式。当然,最终得到的方程式仍然需要结合化学知识进行检验,对此我们不再进一步考虑,仅考虑非零解的存在。
例如要配平化学方程式:
首先假定所有物质在方程的同一侧,即不考虑哪个是反应物,哪个是生成物,分别设这些物质的系数为 ,则可以针对出现的各个元素,列出如下的方程组:
用矩阵的形式表示为:
对系数矩阵实施高斯消元,得到系数矩阵的一个行阶梯形式:
由此可见,系数矩阵的秩为 。根据线性代数的知识,我们知道,齐次线性方程组 的解空间的维数等于其未知数个数减去系数矩阵的秩 。而要让方程式配平,即要求方程组存在非零解,那么就需要让解空间的维数大于 ,即系数矩阵的秩小于未知数个数。因此,我们可以通过判断系数矩阵的秩是否小于未知数个数,来判断方程式是否可以配平。如果可以配平,则可以通过解的符号来判断反应物和生成物的位置。
本题中,我们将给出一些化学方程式,请你按照上述方法判断它们是否可以配平。为了便于程序处理,我们用到的化学式,会被化简为只包含小写字母和数字的字符串,不包含括号。其中连续的字母表示一种元素,随后的数字表示原子个数。原子个数为 时不省略数字;一个化学式中包含的元素不重复。例如,上述方程式中的化学式可以化简为:al2s3o12、n1h5o1、al1o3h3、n2h8s1o4。