NYOJ--1236--挑战密室(第八届河南省程序设计大赛)
挑战密室
- 描述
-
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--挑战密室(第八届河南省程序设计大赛)的更多相关文章
- 第八届河南省程序设计大赛-B.最大岛屿0000110011000000
最大岛屿 时间限制: ...
- Distribution(F题)---第八届河南省程序设计大赛
Description One day , Wang and Dong in the Dubai desert expedition, discovered an ancient castle. Fo ...
- nyoj 1239 引水project (河南省第八届acm程序设计大赛)
题目1239 pid=1239" style="color:rgb(55,119,188)">题目信息 pid=1239" style="col ...
- nyoj 1238 最少换乘 (河南省第八届acm程序设计大赛)
题目1238 题目信息 执行结果 本题排行 pid=1238" style="text-decoration:none; color:rgb(55,119,188)"&g ...
- nyoj1237 最大岛屿(河南省第八届acm程序设计大赛)
题目1237 pid=1237" style="color:rgb(55,119,188)">题目信息 执行结果 本题排行 讨论区 最大岛屿 时间限制:1000 m ...
- NYOJ-712 探寻宝藏(第六届河南省程序设计大赛)
探 寻 宝 藏 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫 ...
- nyoj170 网络的可靠性(第三届河南省程序设计大赛)
题目170 题目信息 执行结果 pid=170" style="text-decoration:none; color:rgb(55,119,188)">本题排行 ...
- 河南省第八届ACM程序设计大赛
A:挑战密室 #include <iostream> #include <cstdio> #include <cstring> #include <algor ...
- 河南省第八届ACM程序设计大赛总结
简单的对这次省赛做个总结:总体来说这个比赛过程中做的还算比较顺利,虽然中间多多少少遇到一些坑,正式比赛开始后,我们就开始找水题,当然了我首先把英文题目翻译了一遍,发现了一道水题,这道题目其实就是判断点 ...
随机推荐
- Matlab: 路径的操作
添加相对路径 在matlab中当代码很多时常常将结果存在不同的文件夹下面,常常使用相对路径对函数进行调用,但有时会存在问题.举个栗子: 代码结构如下: /codes/A/AA/code1.m /cod ...
- linux下如何解压和压缩文件
1.*.tar 用 tar –xvf 解压 2.*.gz 用 gzip -d或者gunzip 解压 3.*.tar.gz和*.tgz 用 tar –xzf 解压 4.*.bz2 用 bzip2 -d或 ...
- 在线SVN仓库实现:金山快盘+TortoiseSVN(Win)+SCPlugin(Mac)
前段时间一直在研究SVN在线托管,也尝试了网上推荐的免费托管网站. 但毕竟是是免费的,还是要受到比如空间大小.私有性等这样那样的限制,感觉有些麻烦. 而且,比较心疼自己在本地开发的时候积累的更新日志, ...
- 关于 静态页面布局 中的一些BUG
作为一枚初级程序猿,难免在制作静态页面时会遇到一些BUG,在此,我从网上找了一些资料并且结合自己的项目开发经验,总结了一些在静态页面布局时可能会遇到的问题,希望能对初级程序猿有一定的帮助(资料请参考: ...
- MySQL(三)--函数与谓词
前文已有涉及,这里作为总结重新整理一下. 一.函数 1.算术函数 NUMERIC 是大多数 DBMS 都支持的一种数据类型,通过 NUMBERIC ( 全体位数, 小数位数 ) 的形式来指定数值的大小 ...
- h5可预览 图片ajax上传 (补更),后台数据获取方法---php
原理是 先获取,然后手动转移文件路径,不然会被服务器自动删除 demo如下: <?php header('content-Type:text/html;charset=utf-8'); $fil ...
- Java的基本数据类型和运算
编码 ASCII--0~127 65-A 97-a 西欧码表---ISO-8859-1---0-255---1个字节 gb2312----0-65535---gbk---2个字节 Unicode编 ...
- Luogu 1064 金明的预算方案 / CJOJ 1352 [NOIP2006] 金明的预算方案(动态规划)
Luogu 1064 金明的预算方案 / CJOJ 1352 [NOIP2006] 金明的预算方案(动态规划) Description 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己 ...
- 编写高质量代码改善C#程序的157个建议:第17个建议之多数情况下使用foreach进行循环遍历
今天是我看<编写高质量代码:改善C#程序的157个建议>第二遍的时候了,看完这本书的确是受益匪浅,学到了很多东西,也明白了很多道理. 里面的代码我每个都调试了一遍,有时候是有些出入的,可能 ...
- rsync随机启动脚本
服务端 #!/bin/sh # chkconfig: # description: Saves and restores system entropy pool for \ #create by xi ...