挑战密室

时间限制: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. Dubbo中的统一契约是如何实现的?

    写在前面 之前,很多小伙伴私信我:如何才能快速的掌握Dubbo的核心原理和源码.所以,我写了一篇<我是如何在短期内快速掌握Dubbo的原理和源码的(纯干货)?>.对于Dubbo的源码解析系 ...

  2. Linux的环境变量配置在/etc/profile或/etc/profile.d/*.sh文件中的区别是什么?

    @ 目录 login shell non-login shell 它们的区别 Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/*.sh,~/.bash ...

  3. centos7防火墙firewalld拒绝某ip或者某ip段访问服务器任何服务

    安装firewall后(LINUX7系统一般情况下默认已安装),防火墙默认配置是只打开SSH端口的,也就是22端口,如果SSH的端口已更改成别的端口了,请切记一定在启动firewall前先修改对应服务 ...

  4. 树莓派zero 使用usb串口连接

    使用minicom连接bash$ lsusbBus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hubBus 001 Device 0 ...

  5. hive 时间相关的函数

    yyyy-MM-dd与yyyyMMdd000000转换的三种方法 方法一:date_format(只支持yyyy-MM-dd -> yyyyMMdd000000) select date_for ...

  6. __del__ PyPy和CPython的不同点 动态编译(注意不是解释) 析构函数被调用的次数

    小结 1.cpy的垃圾回收会对调用__del__多次:pypy仅仅一次: https://www.liaoxuefeng.com/wiki/1016959663602400/1016966024263 ...

  7. TCMalloc源码学习(四)(小内存块释放)

    pagemap_和pagemap_cache_ PageHeap有两个map,pagemap_记录某一内存页对应哪一个span,显然可能多页对应一个span,pagemap_cache_记录某一内存页 ...

  8. P1837 单人纸牌

    写在前面 感谢巨佬 yu__xuan 的帮助! 原本题解区的大佬们大都写的九层循环,其实此题如果写成状压,可以将这九层循环写成一层,非但简洁.代码可读性强,常数也比直接九维 dp 小. 算法思路 由于 ...

  9. ResponseEntity和@ResponseBody以及@ResponseStatus区别

    看的迷迷糊糊的 https://www.jdon.com/springboot/responseentity.html

  10. 将插件绑定在某个phase执行,推送镜像

    文章目录 将插件绑定在某个phase执行 推送镜像 将插件绑定在某个phase执行 需求:在执行mvn clean package 时,插件自动为构建Docker镜像. 实现:将插件的的goal绑定在 ...