挑战密室

时间限制: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. IP命令

    ip命令是Linux下较新的功能强大的网络配置工具. 1 功能 ip命令用来显示或操纵Linux主机的路由.网络设备.策略路由和隧道. 2用法 Usage: ip [ OPTIONS ] OBJECT ...

  2. 由form表单来说说前后台数据之间的交互

    为什么从表单提交说起呢?因为大部分与后台的交互都是在form表单中实现,恰巧我入职一个月来都是在处理与后台交互的数据整合中度过,期间也发现一些小坑,出于喜欢总结,所以才想写这篇小博客. 各位童鞋,可以 ...

  3. ionic 最简单的路由形式,头部固定,下面tab切换-------一个简单的单页切换起飞了

    <ion-header-bar class="bar-dark" align-title="left"> <h1 class="ti ...

  4. QC使用:

    qc使用入门 qc使用安装篇:附链接http://www.cnblogs.com/alterhu/archive/2011/11/05/2237483.html qc使用配置篇:附链接http://w ...

  5. Html 学习

    行内元素和块级元素 行内元素(行级元素) 多个元素会在一行内显示 块级元素 独立成行 注意:块级元素能够嵌套行内元素 <div> <span></span> < ...

  6. Opencv探索之路(十九):读写xml和yml文件

    有时候我们处理完图像后需要保存一下数据到文件上,以供下一步的处理.一个比较广泛的需求场景就是:我们对一幅图像进行特征提取之后,需要把特征点信息保存到文件上,以供后面的机器学习分类操作.那么如果遇到这样 ...

  7. curl学习之curl_setopt参数设置大总结

    CURL函数库里最重要的函数是curl_setopt(),它可以通过设定CURL函数库定义的选项来定制HTTP请求使用方法:bool curl_setopt (int ch, string optio ...

  8. PHP获取文件夹中的所有文件(包括子目录)

    方法一: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 function tree($directory) ...

  9. 关于abp中使用的sweetalert对话框组件的confirm确认对话框中的一个坑

    今天修改了一个功能,限制删除用户,在删除的时候不满足条件的时候提示用户原因,使用的sweet alert组件. abp框架前端集成了sweet alert 对http请求的error做了全局处理,我在 ...

  10. __main() 和 main() 【转】

    因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置,可 ...