挑战密室

时间限制: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. eCATT使用前的配置

    如果想在SAP中使用eCATT,必须做一下相关的配置才行,下面简单介绍这几步:1.SM30,输入表T000,然后点击维护,或者是进入事物SCC4,进入对应的clint属性编辑视图下,将CATT and ...

  2. VL02N发货过账BAPI

    使用BAPI函数: BAPI_OUTB_DELIVERY_CONFIRM_DEC 进行delivery的发货过账,可能会有如此的需求,就是修改实际的发货日期.规划的GI.交货日期.装载日期.传输计划日 ...

  3. Linux安装MYSQL并部署主从复制集群

    主节点部署 安装数据库 Ubuntu apt-get install mysql-server -y systemctl start mysql systemctl enabled mysql Cen ...

  4. linux设备注册

    一.分配cdev cdev表示字符设备,使用cdev_alloc函数,cdev_alloc函数原型如下: /** * cdev_alloc() - allocate a cdev structure ...

  5. CMU数据库(15-445)实验2-B+树索引实现(下+课上笔记)

    4. Index_Iterator实现 这里就是需要实现迭代器的一些操作,比如begin.end.isend等等 下面是对于IndexIterator的构造函数 template <typena ...

  6. JVM(八)执行引擎相关内容

    一:两种解释器 JAVA字节码解释器: java字节码===>c++代码==>硬编码. 首先.java文件编译成字节码,遍历每行的字节码指令,因为每个字节码指令的含义都是固定的所以可以根据 ...

  7. HTML部分

    1.说一下<label>标签的用法 label标签主要是方便鼠标点击使用,扩大可点击的范围,增强用户操作体验 2.说一下事件代理? 事件委托是指将事件绑定到目标元素的父元素上,利用冒泡机制 ...

  8. autocommit 隔离级别 next lock gap lock 事务隔离级别和锁

    autocommit 隔离级别 https://www.ibm.com/developerworks/cn/opensource/os-mysql-transaction-isolation-leve ...

  9. 向同一个模型的外键反向关联名称产生了冲突 Django迁移

    向同一个模型的外键反向关联名称产生了冲突 一个模型中有两个外键指向同一张表时,创建迁移模型时报错:" HINT: Add or change a related_name argument ...

  10. 小步前进之WCF简介

    WCF 前言 什么是WCF? 契约 合约 前言 在 .NET Framework2.0 以及前版本中,微软发展了 Web Service..NET Remoting 等通信支持. 如果要进行通信,对于 ...