挑战密室

时间限制: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 挑战密室的更多相关文章

  1. 第八届acm省赛 A挑战密室(模拟)

    10406: A.挑战密室 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 29  Solved: 10 [Submit][Status][Web Bo ...

  2. 第八届河南省省赛 A.挑战密室

    挑战密室 时间限制: ms | 内存限制: KB 难度: 描述 R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室.Dr. Kong必须尽快找到解锁密码逃离,否则几分钟之后,WT ...

  3. NYOJ--1236--挑战密室(第八届河南省程序设计大赛)

    挑战密室 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室.Dr. Kong必须尽快找到解锁密 ...

  4. 河南省第八届ACM程序设计大赛

    A:挑战密室 #include <iostream> #include <cstdio> #include <cstring> #include <algor ...

  5. [转]室友靠打游戏拿30万offer,秘密竟然是……

    又是一年秋招季,苦逼的小编还天天泡在图书馆里刷PAT,室友大佬却已经到处拿offer.上周某室友已经成功拿到杭州某企业年薪30W的offer,小编虚心向其讨教,某室友一脸兴奋地告诉小编,HR让面试者们 ...

  6. 每天一套题打卡|河南省第八届ACM/ICPC

    A 挑战密室 化学方程式求分子量 这题我懒得写了 可以用map<string,int>哈希表,表示每种分子的相对分子质量 之后,从头遍历到尾. 1.数字:连读直到不是数字 2.字母:连读直 ...

  7. NYOJ 1007

    在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...

  8. NYOJ 998

    这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...

  9. Slave I/O: Got fatal error 1236

    [起因] 一次zabbix报警,从库[Warning] MySQL-repl was down  # 不知道主库/storage空间小于20%时为什么没有触发trigger [从库错误日志] 1611 ...

随机推荐

  1. 使用smartform打印表单

    昨天写了个smartform打印表单,在开发完成,在测试机测试OK,传到生产机,出现严重问题!无法打印,干脆就是无法调用打印图形界面,进入SMARTFORM事物,查看这个表单,发现,居然公司的LOGO ...

  2. dubbo快速入门demo

    参考文章 https://blog.csdn.net/abcwanglinyong/article/details/81906027 该demo包含三个项目,分别是: 服务提供端项目:provider ...

  3. 1.5V升压3V集成电路升压芯片

    干电池1.5V升压3V的升压芯片,适用于干电池升压产品输出3V供电 1.5V输入时,输出3V,电流可达500MA. PW5100是一款效率大.10uA低功耗 PW5100输入电压:0.7V-5V PW ...

  4. 注解 @AutoConfigureBefore 和 @AutoConfigureAfter 的用途

    注解 @AutoConfigureBefore 和 @AutoConfigureAfter 的用途 介绍: 如果你想将在SpringBoot项目中的配置类进行排序,那么用到spring-boot-au ...

  5. CentOS对接GlusterFS

    存储节点部署示例环境,仅供参考 主机名 IP 系统 gfs01 10.10.10.13 CentOS 7.4.1708 gfs02 10.10.10.14 CentOS 7.4.1708 一.Glus ...

  6. kafka项目经验之如何进行Kafka压力测试、如何计算Kafka分区数、如何确定Kaftka集群机器数量

    @ 目录 Kafka压测 Kafka Producer(生产)压力测试 Kafka Consumer(消费)压力测试 计算Kafka分区数 Kafka机器数量计算 Kafka压测 用Kafka官方自带 ...

  7. Language Guide (proto3) | proto3 语言指南(一)定义消息类型

    定义消息类型 首先让我们看一个非常简单的例子.假设您想定义一个搜索请求消息格式,其中每个搜索请求都有一个查询字符串.您感兴趣的特定结果页以及每页的结果数.下面是用于定义.proto消息类型的文件. s ...

  8. HaspMap源码分析(JDK 1.8)

    底层结构分析 上面这两张图分别画出了JDK 1.7.1.8底层数据结构,在JDK 1.7.1.8中都使用 了散列算法,但是在JDK 1.8中引入了红黑树,在链表的长度大于等于8并且hash桶的长度大于 ...

  9. Go语言学习笔记(2)——零散的话题(反射)

    这部分是<Go语言编程>这本书的第9章的内容.书中给该章节的定位是一个文章集,其包含了一些Go语言中比较少涉及,或是比较深入的讨论的内容.因为第一节就是反射,而反射在我看来是比较重要的内容 ...

  10. CSS(简介or选择器)

    我们为什么需要CSS? 使用css的目的就是让网页具有美观一致的页面,另外一个最重要的原因是内容与格式分离 在没有CSS之前,我们想要修改HTML元素的样式需要为每个HTML元素单独定义样式属性,当H ...