nyoj-1236 挑战密室
挑战密室
时间限制:1 s | 内存限制:128 M
题目描述
R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室。Dr. Kong必须尽快找到解锁密码逃离,否则几分钟之后,WTO密室即将爆炸。 Dr. Kong发现密室的墙上写了许多化学方程式中。化学方程式,也称为化学反应方程式,是用化学式表示物质化学反应的式子。化学方程式反映的是客观事实。因此书写化学方程式要遵守两个原则:一是必须以客观事实为基础;二是要遵守质量守恒定律。
化学方程式不仅表明了反应物、生成物和反应条件。同时,化学计量数代表了各反应物、生成物物质的量关系,通过相对分子质量或相对原子质量还可以表示各物质之间的质量关系,即各物质之间的质量比。对于气体反应物、生成物,还可以直接通过化学计量数得出体积比。例如:2NaOH+H2SO4=Na2SO4+2H2O 经过多次试探、推理,Dr. Kong发现密码是4位数字,就隐藏在化学方程式等号后的第一个分子中,其分子量就可能是密码(若分子量不足4位,前面加0)。
好在Dr. Kong还记得墙上各化学方程式用到的化学元素的原子量如下: N C O Cl S H Al Ca Zn Na
14 12 16 35 32 2 27 40 65 23 你能帮Dr. Kong尽快找到密码吗?
输入
第一行: K 表示有K个化学方程式;
接下来有K行,每行为一个化学方程式
输出
对于每个化学方程式输出一行:即密码。
输入样例
3
2C+O2=2CO
2NaOH+H2SO4=Na2SO4+2H2O
Ca2CO3+H2O=Ca2(OH)2+CO2
输出样例
0056
0142
0116
提示
2≤K≤8 ,化学方程式的长度不超过50, 所有原子,分子的数量不超过9.小括号最多一层.
这题没有提示的限制信息的话,感觉是道很难很难的题,写了几个小时都没写出来TT,最后根据提示写出这题,也花了1个小时的时间才敲出来。
结果交上去WA,debug很久,才发现少了个Zn,啊,心态崩了。
附代码:
1 #include <cstdio>
2 #include <cstring>
3 #include<iostream>
4 #include<algorithm>
5 #include<cmath>
6 using namespace std;
7 const int Max = 55;
8 char st[Max];
9 int main()
10 {
11 int k;
12 scanf("%d",&k);
13 while(k--)
14 {
15 int eq,num1=1,num2=0,pri,par=0,f=0; //eq为等号所在的位置,num1为化学物的总个数
16 scanf("%s",st); //num2单个化学物的总质量,par为括号内的总质量
17 int len=strlen(st); //pri是单个元素的质量,例如cl是35,f标记是否在括号内
18 for(int i=0;i<len;i++)
19 {
20 if(st[i]=='=')
21 {
22 eq=i+1;
23 break;
24 }
25 }
26 while(st[eq]!='+'&&st[eq]!='\0')
27 {
28 if(st[eq]=='(')
29 f=1;
30 if(st[eq]==')')
31 f=0;
32 if(st[eq-1]=='='&&st[eq]>='0'&&st[eq]<='9')
33 num1=st[eq]-'0';
34 else if(st[eq]>='0'&&st[eq]<='9')
35 {
36 if(f)
37 par+=pri*(st[eq]-'0'-1);
38 else if(!f&&st[eq-1]==')')
39 par+=par*(st[eq]-'0'-1);
40 else
41 num2+=pri*(st[eq]-'0'-1);
42 }
43 else
44 {
45 if(st[eq]=='N')
46 {
47 if(st[eq+1]=='a')
48 pri=23;
49 else
50 pri=14;
51 }
52 else if(st[eq]=='C')
53 {
54 if(st[eq+1]=='a')
55 pri=40;
56 else if(st[eq+1]=='l')
57 pri=35;
58 else
59 pri=12;
60 }
61 else if(st[eq]=='O')
62 pri=16;
63 else if(st[eq]=='S')
64 pri=32;
65 else if(st[eq]=='H')
66 pri=2;
67 else if(st[eq]=='A')
68 pri=27;
69 else if(st[eq]=='Z')
70 pri=65;
71 else //因为我的代码是无论是否是化学元素,最后都会加一下pri,所以
72 { //在这里加上一个else,如果不是表中的化学元素,而是数字什么的
73 if(f) // 就减去后面会加上的pri(主要是懒得在前面再加个大的判断语句了-_-)
74 par-=pri;
75 else
76 num2-=pri;
77 }
78 if(f) //如上所说
79 par+=pri;
80 else
81 num2+=pri;
82 //printf("%dpri\n%d\n",pri,num2);
83 }
84 eq++;
85 }
86 printf("%04d\n",num1*(par+num2));
87 }
88 return 0;
89 }
90
91
nyoj-1236 挑战密室的更多相关文章
- 第八届acm省赛 A挑战密室(模拟)
10406: A.挑战密室 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 29 Solved: 10 [Submit][Status][Web Bo ...
- 第八届河南省省赛 A.挑战密室
挑战密室 时间限制: ms | 内存限制: KB 难度: 描述 R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室.Dr. Kong必须尽快找到解锁密码逃离,否则几分钟之后,WT ...
- NYOJ--1236--挑战密室(第八届河南省程序设计大赛)
挑战密室 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室.Dr. Kong必须尽快找到解锁密 ...
- 河南省第八届ACM程序设计大赛
A:挑战密室 #include <iostream> #include <cstdio> #include <cstring> #include <algor ...
- [转]室友靠打游戏拿30万offer,秘密竟然是……
又是一年秋招季,苦逼的小编还天天泡在图书馆里刷PAT,室友大佬却已经到处拿offer.上周某室友已经成功拿到杭州某企业年薪30W的offer,小编虚心向其讨教,某室友一脸兴奋地告诉小编,HR让面试者们 ...
- 每天一套题打卡|河南省第八届ACM/ICPC
A 挑战密室 化学方程式求分子量 这题我懒得写了 可以用map<string,int>哈希表,表示每种分子的相对分子质量 之后,从头遍历到尾. 1.数字:连读直到不是数字 2.字母:连读直 ...
- NYOJ 1007
在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...
- NYOJ 998
这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...
- Slave I/O: Got fatal error 1236
[起因] 一次zabbix报警,从库[Warning] MySQL-repl was down # 不知道主库/storage空间小于20%时为什么没有触发trigger [从库错误日志] 1611 ...
随机推荐
- CTS相关的几个表
TMSALOG/TMSALOGAR :STMS传输日志表 TMSCNFS:传输组 TMSCDOM:传输域 TMSCDES:传输目的地 TMSBUFTXT:传输请求的短文本和用户 TMSCSYS:tms ...
- SparkStreaming和Kafka基于Direct Approach如何管理offset实现exactly once
在之前的文章<解析SparkStreaming和Kafka集成的两种方式>中已详细介绍SparkStreaming和Kafka集成主要有Receiver based Approach和Di ...
- 使用 tke-autoscaling-placeholder 实现秒级弹性伸缩
背景 当 TKE 集群配置了节点池并启用了弹性伸缩,在节点资源不够时可以触发节点的自动扩容 (自动买机器并加入集群),但这个扩容流程需要一定的时间才能完成,在一些流量突高的场景,这个扩容速度可能会显得 ...
- 三. SpringCloud服务注册与发现
1. Eureka 1.1 Eureka理解 什么是服务治理 Spring Cloud封装了Netflix公司开发的Eurkeka模块来实现服务治理 在传统的rpc远程调用框架中,管理每个服务与服务之 ...
- Vue基础之Vue组件
Vue基础之Vue组件 // 组件是可以复用的Vue实例! // 可以把经常重复的功能封装为组件!
- java面向对象(二)构造函数和构造代码块
面向对象 类成员 1.成员变量 属性 数值类型的基本数据类型默认值是 0 成员变量在任何方法中都能访问,和声明先后没有关系 2.成员函数 方法 3.定义方式 class 类名{成员变量:成员函数} / ...
- (Oracle)导出表结构
DECLARE cursor t_name is SELECT rank() over(order by a.TABLE_NAME) as xiaolonglong,a.TABLE_NAME FROM ...
- (Sql Server)存储过程(转载)
SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这 ...
- [Python]编码声明:是coding:utf-8还是coding=utf-8呢
PEP 263 -- Defining Python Source Code Encodings | Python.org https://www.python.org/dev/peps/pep-02 ...
- 翻页bug 在接口文档中应规范参数的取值区间 接口规范
<?php$a=array("red","green","blue","yellow","brown&q ...