挑战密室

时间限制: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. RPM基础知识

    RPM包命名原则 httpd-2.2.15-15.el6.centos.1.i686.rpm httpd       软件包名 2.2.15       软件版本 15      软件发布的次数 el ...

  2. linux下vim 查找命令

    在命令模式下输入/word 这个是查找文件中“word”这个单词,是从文件上面到下面查找?word 这个是查找文件中“word”这个单词,是从文件下上面到面查找

  3. [leetcode-506-Relative Ranks]

    Given scores of N athletes, find their relative ranks and the people with the top three highest scor ...

  4. 【LeetCode】225. Implement Stack using Queues

    题目: Implement the following operations of a stack using queues. push(x) -- Push element x onto stack ...

  5. Your password does not satisfy the current policy requirements

    创建用户,做测试想设置一个简单的密码.报错: 大概是MySQL5.7搞事情,默认安装了validate_password插件. mysql> SHOW VARIABLES LIKE 'valid ...

  6. hdu2413(二分+二分匹配)

    题意:人和外星人星球大战,人总共有H个星球,外星人有A个星球,现在人要用飞船去打外星人的飞船,要求每个人类星球只能对战一个外星球,且每个星球都开始有己知的飞船数,不论是人或外星人的星球,并每个星球都有 ...

  7. 【SqlServer系列】表单查询

    1   概述 如下几个问题,如果你能解决,请继续往下看,若不能解决,请先复习SQL基础知识,再来阅读本篇文章.本篇文章深度中等左右. Q1:表StudentScores如下,用一条SQL语句查询出每门 ...

  8. App 组件化/模块化之路——如何封装网络请求框架

    App 组件化/模块化之路——如何封装网络请求框架 在 App 开发中网络请求是每个开发者必备的开发库,也出现了许多优秀开源的网络请求库.例如 okhttp retrofit android-asyn ...

  9. MySQL实现自动使用uuid作为主键以及解决不能调用触发器的一点思路

    这里使用触发程序实现此功能. 触发程序语法如下: Create trigger <tri_name> {before|after} {insert|update|delete} On &l ...

  10. MAC本上appium连接真机

    简单介绍一下appium连接ios真机测试环境的软件安装及配置过程: 目前我用的是desktop版本的appium, 所以MAC版本必须要升级到10.12以上,Xcode版本必须要在8.0以上,否则亲 ...