【CCF-CSP】202403-3 化学方程式配平

 

输入格式:

从标准输入读入数据。

输入的第一行包含一个正整数 n,表示需要判断的化学方程式的个数。

接下来的 n 行,每行描述了一个需要被配平的化学方程式。包含空格分隔的一个正整数和全部涉及物质的化学式。其中,正整数 m 表示方程式中的物质;随后的 m 个字符串,依次给出方程式中的反应物的化学式和生成物的化学式。

输出格式:

输出到标准输出。

输出包含 n 行,每行包含字母 Y 或 N,表示按题设方法,所给待配平化学方程式能否配平。

提示:

  • 对矩阵进行高斯消元的一种方法是:

    1. 考察矩阵的第一列上的元素:
      • 若全都为零,则对除去该列的子矩阵重复上述判断;
      • 若不全为零,则:
        1. 考察第一行第一列的元素:
          • 如果其为 0,则将该行与后面的某一个第一列非 0 的行交换,使第一行第一列的元素非 0;
        2. 令后续所有行减去第一行的适当倍数,使得后续所有行的第一列元素为 0;
    2. 对除去第一行第一列的子矩阵重复上述操作,直至不再余下子矩阵。
  • 对系数矩阵高斯消元后,不全为 0 的行的数目即为系数矩阵的秩。

  • 评测环境仅提供各语言的标准库,特别地,不提供任何线性代数库。

思路:

这是一道比较简单的矩阵运算题,但是矩阵的那些专业术语我也不太记得了,代码里面就直接写运算的步骤了,如果需要的话,可以去回顾一下阶梯型矩阵化简的方法。

代码:

#include <bits/stdc++.h>
#define N 50
using namespace std;int n,m,cnt,r;//cnt是元素个数,r是矩阵的秩
double a[N][N];//矩阵系数
string s;
map<string,int> mp;//记录元素的编号void fun(int id){//对物质的每个元素进行统计string name=""; //元素名int c=0; //元素右边的系数for(int i=0;i<s.size();i++){if(isdigit(s[i])){int j=i; //获得元素右边的系数while(j<s.size()&&isdigit(s[j])) c=c*10+s[j++]-'0';i=j-1;int k; //元素编号if(mp.count(name)) k=mp[name]; //前面出现过else k=mp[name]=++cnt; //没出现过a[k][id]=c; //每个元素在矩阵中是一行,一共有m列,m是物质(未知量)个数name="";c=0;}else name+=s[i]; //元素名}}
void solve(){memset(a,0,sizeof a);cnt=0;mp.clear();cin>>m;for(int i=1;i<=m;i++){cin>>s;fun(i);//对每个物质的元素进行统计}for(int i=1;i<=cnt+1;i++){ //矩阵行运算,到cnt+1,便于统计边界int fg=0;for(int j=i;j<=cnt;j++){ //选择一个第i列不为0的行if(abs(a[j][i])>1e-6){fg=j;break;}}if(!fg){ //如果没有,那就结束了r=i-1;break;}for(int k=1;k<=m;k++) swap(a[i][k],a[fg][k]);//交换两行for(int j=i+1;j<=cnt;j++){//后面的行 用矩阵行相加运算把这一列的值变为0if(a[j][i]>0){double c=a[j][i]/a[i][i];for(int k=i;k<=m;k++) a[j][k]-=c*a[i][k];}}}if(r<m) cout<<"Y"<<endl;else cout<<"N"<<endl; 
}
int main(){cin>>n;while(n--){solve();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/9744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 安装 samba 实现文件共享

1. samba的安装: sudo apt-get install samba sudo apt-get install smbfs2. 创建共享目录 mkdir /home/share sudo chmod -R 777 /home/share3. 创建Samba配置文件: 3.1 保存现有的配置文件 sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak3.2 打开现有的文件 sudo…

Docker快速启动清单

以下容器均使用 Docker version 24.0.2 版本测试使用&#xff0c;这里需要注意一下&#xff0c;高版本的Docker不支持镜像V1版本&#xff0c;不知道怎么操作才可以让它支持&#xff0c;所以推荐使用低版本 如果觉得不直观&#xff0c;或者觉得有点乱&#xff0c;可以访问以下网…

第十二章 元数据管理练习

单选题 (每题1分,共23道题) 1、 [单选] 元数据的来源有哪些? A:参考数据库、BI工具 B:数据字典、数据集成工具 C:建模工具和事件消息工具 D:以上都是 正确答案:D 你的答案:D 解析:327~330页,一共15个来源,所以选D,考核知识点,元数据的基本概念,元数据来源相关…

Window如何运行sh文件以及wget指令

Git下载 官网链接如下&#xff1a;https://gitforwindows.org/ 安装就保持一路无脑安装就行&#xff0c;不需要改变安装过程中的任何一个选项。 配置Git 切刀桌面&#xff0c;随便右击屏幕空白处&#xff0c;点open Git Bash here 把这行复制过去&#xff0c;回车&#xff1…

【用文本生成歌声】Learn2Sing 2.0——歌声转换算法及梅尔频谱详解

一. 频谱图与梅尔谱图的介绍 频谱图&#xff1a;频谱图可以理解为一堆垂直堆叠在一起的快速傅里叶变换结果。 1.1 信号 在进入频谱图模块之前&#xff0c;首先我们需要了解信号是什么。 信号就是某一特定量随时间变化&#xff0c;对于音频来说&#xff0c;这个特定的变化量就…

Python图形复刻——绘制母亲节花束

各位小伙伴&#xff0c;好久不见&#xff0c;今天学习用Python绘制花束。 有一种爱&#xff0c;不求回报&#xff0c;有一种情&#xff0c;无私奉献&#xff0c;这就是母爱。祝天下妈妈节日快乐&#xff0c;幸福永远&#xff01; 图形展示&#xff1a; 代码展示&#xff1a; …

多目标跟踪入门介绍

多目标跟踪算法 我们也可以称之为 Multi-Target-Tracking &#xff08;MTT&#xff09;。 那么多目标跟踪是什么&#xff1f; 不难看出&#xff0c;跟踪算法同时会为每个目标分配一个特定的 id 。 由此得出了目标跟踪与目标检测的区别&#xff08;似乎都是用方框来框出目标捏…

创新案例|搜索新王Perplexity如何构建生成式AI产品开发的新模式

Perplexity AI&#xff1a;生成式搜索的颠覆者 刚刚成立满两年&#xff0c;Perplexity AI已经变成了我日常频繁使用的工具&#xff0c;甚至取代了我对 Google搜索的依赖 —— 而我并非个案。该公司仅凭不到 50 名员工&#xff0c;已经吸引了数千万用户。他们目前的年收入超过 …

数据赋能(81)——数据要素:管理必要性

数据作为现代社会的核心资源&#xff0c;其潜在价值巨大。有效的数据要素管理能够确保数据得到充分的利用&#xff0c;转化为具备潜在利用价值的数据资产&#xff0c;为使用者或所有者带来经济效益。数据要素管理涉及到数据的收集、存储、处理、分析和利用等各个环节&#xff0…

马尔可夫决策过程(Markov Decision Process,简称MDP)

马尔可夫决策过程是一个四元组&#xff08;S, A, P, R&#xff09;&#xff0c;其中&#xff1a; S是状态集合&#xff0c;表示智能体&#xff08;Agent&#xff09;可能处于的所有状态&#xff1b;A是动作集合&#xff0c;表示智能体可以采取的所有动作&#xff1b;P是状态转…

Linux 操作系统线程1

目录 一、线程 1.1线程的基本概念 1.2 线程相关的API函数 1.2.1 线程的创建 1.2.2 线程退出 1.2.3 线程等待函数 1.2.4 获取线程ID 1.2.5 线程取消 1.2.6 线程的清理函数 一、线程 1.1线程的基本概念 线程是属于进程&#xff1b;一个进程可以有多个线程&#xff…

第五十八节 Java设计模式 - 适配器模式

Java设计模式 - 适配器模式 我们在现实生活中使用适配器很多。例如&#xff0c;我们使用存储卡适配器连接存储卡和计算机&#xff0c;因为计算机仅支持一种类型的存储卡&#xff0c;并且我们的卡与计算机不兼容。 适配器是两个不兼容实体之间的转换器。适配器模式是一种结构模…

一文看懂深度学习中的cuda环境配置:cuda,cuda driver,cudnn与pytorch-cuda

深度学习中通常会涉及到cuda环境相关的问题&#xff0c;特别是torch版本&#xff0c;cuda版本等兼容问题。 主要涉及到这四个方向 显卡驱动&#xff1a;cuda driver 。驱动API &#xff08;driver API&#xff09;通过nvidia-smi查看&#xff0c;是所有cuda环境的基础CudaTool…

【二叉树】(一)二叉树基础知识及多种遍历方式

二叉树基础知识及多种遍历方式 关于二叉树&#xff0c;该了解这些二叉树的种类存储方式遍历方式节点定义 二叉树的三种递归遍历&#xff08;深度遍历&#xff09;递归遍历设计核心思想递归遍历力扣例题解析 二叉树的三种迭代遍历&#xff08;深度遍历&#xff09;前后续遍历中序…

数据库开启远程连接

服务器端添加一个允许远程连接的root用户: mysql -u root -p create user root192.168.10.20 identified by admin; //创建一个192.168.10.20地址远程连接的root用户 grant all privileges on *.* to root192.168.10.20; //赋予远程root用户所有的权…

中国地形可调节高度-UE5-UE4

2000坐标系&#xff0c;可进行高度调整。 支持版本4.21-5.4版本 下载位置&#xff1a;https://mbd.pub/o/bread/ZpWZm5Zs

教你解决PUBG绝地求生启动不了 登录不了 登录不进去的问题

尽管《绝地求生》&#xff08;PUBG&#xff09;凭借其紧张刺激的战术对抗与高度仿真的战场环境在全球范围内赢得了众多拥趸&#xff0c;但不少玩家在经历了一场紧张激烈的生命争夺赛后&#xff0c;却面临着一个不愉快的现实&#xff1a;游戏无法顺利启动或登录。这种紧随激烈战…

【docker】常用的把springboot打包为docker镜像的maven插件

Spring Boot Maven Plugin: Spring Boot 自带的 Maven 插件 (spring-boot-maven-plugin) 支持直接生成 Docker 镜像。通过配置&#xff0c;可以在 Maven 构建过程中自动构建 Docker 镜像&#xff0c;而无需单独编写 Dockerfile。这种方法简化了将应用打包为 Docker 镜像的过程。…

工业数据采集软件 高效的数字化信息管理系统

近年来&#xff0c;随着产线自动化程度的提升&#xff0c;越来越多的工业设备被运用到自动化生产中&#xff0c;产线中各位置所产生的数据也越来越多&#xff0c;每个设备又都是独立的&#xff0c;如何将其整合&#xff0c;进行系统化查看处理&#xff0c;就是工业数据采集软件…

05.线程

进程有哪些缺陷&#xff1f; 1.创建的代价较高 进程是OS进行资源分配的基本单位&#xff0c;也就是说创建进程是需要分配资源的&#xff0c;所以创建代价很高 2.通信不方便 进程之间要想进行通信必须借助第三方资源&#xff08;管道、内存映射、消息队列&#xff09; 线程的优…