挑战密室

时间限制: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. loadrunner 手工参数拼接与l oadrunner的url编码

    Acction() { //演示需要的一些变量,提前声明 char *name = "yezi_zh"; "; char *work = "engin" ...

  2. 【Android Developers Training】 26. 在SQL数据库中保存数据

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. jQuery与原生js实现banner轮播图

    jQuery与原生js实现banner轮播图: (jq需自己加载)(图片需自己加载) <!DOCTYPE html> <html> <head> <meta ...

  4. [Android FrameWork 6.0源码学习] LayoutInflater 类分析

    LayoutInflater是用来解析XML布局文件,然后生成对象的ViewTree的工具类.是这个工具类的存在,才能让我们写起Layout来那么省劲. 我们接下来进去刨析,看看里边的奥秘 //调用i ...

  5. zookeeper初试

    实验环境: os-platform: windows7 x64 jdk: 1.7 参考文档: http://www.ibm.com/developerworks/cn/opensource/os-cn ...

  6. 集成 ssh第一阶段

    1.添加spring支持,包含spring-hibernate和spring-struts2.添加struts支持,包含struts-spring3.添加hibernate支持,在spring配置文件 ...

  7. Python之编写登陆接口

    1.输入用户名密码: 2.认证成功后显示欢迎信息: 3.错误三次后,账号被锁定. 账号文件:user.txt 锁定文件:locked.txt 流程图如下: # -*- coding:utf-8 -*- ...

  8. Servlet Filter 中init和destroy问题

    测试源码如下: package com.FilterTest.Filter; import java.io.IOException; import javax.servlet.Filter; impo ...

  9. Linux - 请允许我静静地后台运行

    h1,h2,h3,h4,h5,h6,p,blockquote { margin: 0; padding: 0 } body { font-family: "Helvetica Neue&qu ...

  10. Unrooted Tests错误

    使用Junit4做测试,遇到如下问题: 条件如下: Eclipse里的Maven工程. 使用JUnit4(这个是否必须不知,反正我的工程用的4) 修改某个Test类里的方法名,或者增加一个Test方法 ...