挑战密室

时间限制: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. 添加保存less报错

    编辑器在添加保存less文件弹出一下错误: re-evaluation native module sources is not supported,if you are using the grac ...

  2. 按enter 进行搜索 enter提交表单

    //按enter 进行搜索 document.onkeydown = function(e){ var ev = document.all ? window.event : e; if(ev.keyC ...

  3. js将时间戳转成格式化的时间

    function getLocalTime(nS){ return new Date(parseInt(nS) * 1000).toLocaleString().replace(/年|月/g, &qu ...

  4. jQuery星级评分插件

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="Con ...

  5. AngularJS服务和路由

    colnplie     网页加载的出现一次 link     元素每次改变的时候 **$watch** 监听列表     $scope.$watch("name",functio ...

  6. Python 文件对象

    Python 文件对象 1) 内置函数 open() 用于打开和创建文件对象 open(name,[,mode[,bufsize]]) 文件名.模式.缓冲区参数 mode: r 只读 w 写入 a 附 ...

  7. 基于Spring MVC 实现拦截器

    Spring MVC 拦截器 一,具体内容: 在所有的开发之中拦截器属于一个重要的组件,可以说几乎所有的项目都会提供的概念应用,不管是Spring MVC,还是Struts 2.x都是提供有拦截器的, ...

  8. SSIM(结构相似度算法)不同实现版本的差异

    前言 最近用ssim测试图片画质损伤时,发现matlab自带ssim与之前一直使用的ssim计算得分有差异,故和同事开始确定差异所在. 不同的SSIM版本 这里提到不同的ssim版本主要基于matla ...

  9. Gist - Fetch Usage

    Introduction Do you prefer the usage of "ES6 Promise"? If you do, you will like the usage ...

  10. 【linux相识相知】用户及权限管理

    linux系统是多用户(Multi-users)和多任务(Multi-tasks)的,这样的目的是为了一台linux主机可以给很多用户提供服务同时运行多种服务,但是我们是怎么区分每个用户呢?作为一个管 ...