挑战密室

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
 
描述

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.小括号最多一层.
来源
第八届河南省程序设计大赛
 /*
     Name: NYOJ--1236--挑战密室(第八届河南省程序设计大赛)
     Copyright: ©2017 日天大帝
     Author: 日天大帝
     Date: 03/05/17 20:48
     Description: 思路:
                     1.先处理开头的数字
                     2.每次处理一个元素,如果后面跟有数字,一起处理后入栈
                     3.遇到(之后每个元素都入栈一个(
                     4.遇到)先出队两个(因为两个元素只计算一次,却进栈了3个(、
                     5.将数值栈中的元素出栈累加
                     6乘以开头数字输出
                     比赛没调完,比赛调了一下直接A了o(╯□╰)o
 */
 #include<stack>
 #include<map>
 #include<iomanip>
 #include<iostream>
 using namespace std;
 map<string,int> mymap;
 stack<int> num;
 stack<char> op;
 void init(){
     while(!num.empty())num.pop();
     while(!op.empty())op.pop();
     mymap[;
     mymap[;
     mymap[;
     mymap[;
     mymap[;
     mymap[;
     mymap[;
     mymap[;
     mymap[;
     mymap[;
 }
 int check(char ch,char c){
     ;
     ;
     ;
     ;
     ;
 }
 int main(){
     ios::sync_with_stdio(false);
     int k;cin>>k;
     init();
     while(k--){
         string str;cin>>str;
         int st = str.find("=");
         );
         int en = s.find("+");
         s = s.substr(,en);
         s += "!";//加一个标记判断最后的元素是一个还是两个字符
         ;
         ;
         while(isdigit(s[i])){//将开始的数字提取出来单独处理
             res *= ;
             res += s[i] - ';
             i++;
         }
         )res = ;
         while(i < s.size()){//循环遍历字符串
             if(isalpha(s[i])){//是字母
                 ]) == ){//判断是否为两位的元素
                     string temp = "";
                     temp += s[i];
                     temp += s[i+];
                     ;
                     ])){
                         ])){
                             x *= ;
                             x += s[i+] - ';
                             i++;
                         }
                     }
                     )num.push(mymap[temp] * x);
                     else num.push(mymap[temp]);
                     if(!op.empty())op.push('(');
                     i += ;
                 }else{//一位的元素
                     string temp = "";
                     temp += s[i];
                     ;
                     ])){
                         x *= ;
                         x += s[i+] - ';
                         i++;
                     }
                     )num.push(mymap[temp] * x);
                     else num.push(mymap[temp]);
                     if(!op.empty())op.push('(');
                     i++;
                 }
             }else if(s[i] == '('){//(括号
                 op.push('(');
                 i++;
             }else if(s[i] == ')'){//)括号
                 op.pop();op.pop();
                 while(!op.empty()){
                     int a = num.top();num.pop();
                     int b = num.top();num.pop();
                     num.push(a+b);
                     op.pop();
                 }
                 i++;
                 if(isdigit(s[i])){
                     int x = num.top();num.pop();
                     x *= s[i] - ';
                     num.push(x);
                 }
                 i++;
             }
             else i++;//加!标记结尾了
         }
         ;
         while(!num.empty()){//将数字栈中所有数字出栈
             ans += num.top();
             num.pop();
         }
         cout<<setw()<<setfill(')<<res*ans<<endl;
     }
     ;
 }

NYOJ--1236--挑战密室(第八届河南省程序设计大赛)的更多相关文章

  1. 第八届河南省程序设计大赛-B.最大岛屿0000110011000000

    最大岛屿                                                                                           时间限制: ...

  2. Distribution(F题)---第八届河南省程序设计大赛

    Description One day , Wang and Dong in the Dubai desert expedition, discovered an ancient castle. Fo ...

  3. nyoj 1239 引水project (河南省第八届acm程序设计大赛)

    题目1239 pid=1239" style="color:rgb(55,119,188)">题目信息 pid=1239" style="col ...

  4. nyoj 1238 最少换乘 (河南省第八届acm程序设计大赛)

    题目1238 题目信息 执行结果 本题排行 pid=1238" style="text-decoration:none; color:rgb(55,119,188)"&g ...

  5. nyoj1237 最大岛屿(河南省第八届acm程序设计大赛)

    题目1237 pid=1237" style="color:rgb(55,119,188)">题目信息 执行结果 本题排行 讨论区 最大岛屿 时间限制:1000 m ...

  6. NYOJ-712 探寻宝藏(第六届河南省程序设计大赛)

    探 寻 宝 藏 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫 ...

  7. nyoj170 网络的可靠性(第三届河南省程序设计大赛)

    题目170 题目信息 执行结果 pid=170" style="text-decoration:none; color:rgb(55,119,188)">本题排行 ...

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

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

  9. 河南省第八届ACM程序设计大赛总结

    简单的对这次省赛做个总结:总体来说这个比赛过程中做的还算比较顺利,虽然中间多多少少遇到一些坑,正式比赛开始后,我们就开始找水题,当然了我首先把英文题目翻译了一遍,发现了一道水题,这道题目其实就是判断点 ...

随机推荐

  1. Api接口通用安全策略及实现-OSS.Core

    这篇文章一直说写,迟迟没有动手,这两天看到一些应用接口数据被别人爬虫.短信接口被人高频率请求攻击等案列,感觉简单概述分享一下接口安全验证还是有必要的.毕竟当下基本都以客户端应用为主,如果前期疏忽,发布 ...

  2. jQuery淡入淡出的轮播图

    html结构: <div class="banna">            <ul class="img">              ...

  3. 遇到android.os等系统sdk包没有自动导入的情况

    采取手动导入,build path,然后add external jar,找到sdk的安装目录,导入android 的jar包即可

  4. IE的hack问题浅谈

    *我一直以为是IE7的专属选择. 开始,我以为是bug ,怎么可能会有+号.一定是哪位同事写错了.找了度娘才知道自己的不足.原来也是可以的. 后来,通过ie8和ie7来调整自己的css.也感觉不用ha ...

  5. Apollo框架试玩

    2017年7月5日,百度举行了AI开发者大会,在会上发布了Apollo项目,并进行了演示,该项目在Github上已经能够被访问.出于一个程序员的好奇,昨天试玩了一把,确实不错. http://apol ...

  6. VB6之扫雷克星

    很久之前,那时候我还不太会玩(现在也不厉害)扫雷这个游戏,同学总在我面前炫耀自己的技术有多叼.“高级,99颗雷,只需三分钟...”,如此这般.也许确实需要天赋,我总要排查个半天才敢点下左键,然后就BO ...

  7. 奇舞js笔记——第0课——如何写好原生js代码

    摘要 1.好的代码职责要清晰,javscript不要用来操作样式: 2.API要设计的合理:通用性,适度的抽象(数据抽象,过程抽象),可扩展性: 3.效率问题:用好的.合适的算法(前端程序员要把自己当 ...

  8. HashMap的存储原理

    HashMap是java中相当重要的数据结构,使用HashMap的场景非常之多,因此,了解HashMap实现的过程和原理,是非常有必要的,在一些面试中也会经常被问到.好了,我们赶紧来研究java内部是 ...

  9. Tkinter开发第一个桌面程序HelloWorld

    在Python3中是tkinter,Python2中是Tkinter Tkinter是Python 官方承认的标准 GUI 方案(de-facto standard),因为是Python自带安装,决定 ...

  10. 小哈学Python第二课:Hello Word

    Python入门 1.Hello World 2.Hello World