P4711 「化学」相对分子质量
P4711 「化学」相对分子质量
给你一个字符串让你输出相对分子质量(弱智字符串模拟)
我比赛tm调了两个半小时啊QAQ
希望以后能增加代码力吧,纪念挂代码
Code
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
#include<cstring>
#include<map>
typedef long long LL;
using namespace std;
int RD(){
int out = 0,flag = 1;char c = getchar();
while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
return flag * out;
}
const int maxn = 119;
map<string,double>M;
char s[maxn];
double ans,len;
double now;//
int main(){
string x = "H";M[x] = 1;
x = "C";M[x] = 12;
x = "N";M[x] = 14;
x = "O";M[x] = 16;
x = "F";M[x] = 19;
x = "Na";M[x] = 23;
x = "Mg";M[x] = 24;
x = "Al";M[x] = 27;
x = "Si";M[x] = 28;
x = "P";M[x] = 31;
x = "S";M[x] = 32;
x = "Cl";M[x] = 35.5;
x = "K";M[x] = 39;
x = "Ca";M[x] = 40;
x = "Mn";M[x] = 55;
x = "Fe";M[x] = 56;
x = "Cu";M[x] = 64;
x = "Zn";M[x] = 65;
x = "Ag";M[x] = 108;
x = "I";M[x] = 127;
x = "Ba";M[x] = 137;
x = "Hf";M[x] = 178.5;
x = "Pt";M[x] = 195;
x = "Au";M[x] = 197;
x = "Hg";M[x] = 201;
/////////
cin>>s;len = strlen(s);
for(int i = 0;i < len;i++){
if(s[i] == '~'){//水合物
i++;
int numw = 0;
while(s[i] <= '9' && s[i] >= '0'){numw = numw * 10 + s[i] - '0';i++;}
ans += 18 * numw;
if(numw == 0)ans += 18;
break;
}
if(s[i] <= 'Z' && s[i] >= 'A'){//处理单个元素
x = s[i];string temp;
if(s[i + 1] >= 'a' && s[i + 1] <= 'z')temp = s[i + 1],i++;//是否为两个字母
x = x + temp;//cout<<"x="<<x<<endl;
for(map<string,double>::iterator it = M.begin(); it != M.end(); it++){
string com = it->first;
if(x == com){now = it->second;break;}
}
int tim = 0;
if(s[i + 1] == '_'){
while(s[i] != '{')i++;i++;//读取倍数
while(s[i] != '}'){tim = tim * 10 + s[i] - '0';i++;}
}
if(tim)ans += tim * now;
else ans += now;
}
if(s[i] == '('){
i++;
double ans1 = 0,now1 = 0;
char n[maxn];int in = 0;
while(s[i] != ')'){n[in++] = s[i++];}i++;
for(int k = 0;k < in;k++){
if(n[k] <= 'Z' && n[k] >= 'A'){
string a,b;a = n[k];
if(n[k + 1] <= 'z' && n[k + 1] >= 'a'){b = n[k + 1];k++;}
a = a + b;//cout<<a<<endl;
for(map<string,double>::iterator it = M.begin(); it != M.end(); it++){
string com = it->first;
if(com == a){now1 = it->second;break;}
}//printf("now1=%d\n",now1);
int tim1 = 0;
if(n[k + 1] == '_'){
while(n[k] != '{')k++;k++;//读取倍数
while(n[k] != '}'){tim1 = tim1 * 10 + n[k] - '0';k++;}
}
if(tim1)ans1 += tim1 * now1;
else ans1 += now1;
}
}//printf("ans1=%d\n",ans1);
if(s[i] == '_'){
int tim2 = 0;
while(s[i] != '{')i++;i++;
while(s[i] != '}'){tim2 = tim2 * 10 + s[i] - '0';i++;}
if(tim2)ans += ans1 * tim2;
else ans += ans1;
}
}
}
if(ans == (int)ans)printf("%d\n",(int)ans);
else printf("%.1lf",ans);
return 0;
}
P4711 「化学」相对分子质量的更多相关文章
- 【洛谷】【模拟+栈】P4711 「化学」相对分子质量
[题目传送门:] [戳] (https://www.luogu.org/problemnew/show/P4711) [算法分析:] 关于一个分子拆分后的产物,一共有三种情况: 原子 原子团 水合物 ...
- 【luogu P4711 「化学」相对分子质量】 题解
题目链接:https://www.luogu.org/problemnew/show/P4711 要细心模拟 #include <cstdio> #include <algorith ...
- 《Offer一箩筐》一份高质量「简历」撰写指南,望打扰!!
「MoreThanJava」 宣扬的是 「学习,不止 CODE」. 如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! Hi~ 这里是 ...
- 「2014-3-18」multi-pattern string match using aho-corasick
我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...
- 一个「学渣」从零开始的Web前端自学之路
从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的“丰富”. 最后的机缘巧合下,走上了前端开发之路,作为一个非计算机专业且低 ...
- 「NOI2018」你的名字
「NOI2018」你的名字 题目描述 小A 被选为了\(ION2018\) 的出题人,他精心准备了一道质量十分高的题目,且已经 把除了题目命名以外的工作都做好了. 由于\(ION\) 已经举办了很多届 ...
- 「Sqlserver」数据分析师有理由爱Sqlserver之九-无利益关系推荐Sqlserver书单
在前面系列文章的讲述下,部分读者有兴趣进入Sqlserver的世界的话,笔者不太可能在自媒体的载体上给予全方位的带领,最合适的方式是通过系统的书籍来学习,此篇给大家梳理下笔者曾经看过的自觉不错值得推荐 ...
- 每个程序员都可以「懂」一点 Linux
提到 Linux,作为程序员来说一定都不陌生.但如果说到「懂」Linux,可能就没有那么多人有把握了.到底用 Linux 离懂 Linux 有多远?如果决定学习 Linux,应该怎么开始?要学到什么程 ...
- 「MoreThanJava」当大学选择了计算机之后应该知道的
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...
随机推荐
- Microsoft Visual Studio 2013 的安装及单元测试
题目:练习教科书第22~25页单元测试练习,要求自行安装Visual Studio开发平台,版本至少在2010以上,要求把程序安装过程和练习过程写到博客上,越详细越好,要图文并茂. 安装过程: 1.下 ...
- 四则运算<C++>
代码: #include<iostream> #define N 30 using namespace std; void main() { cout<<"***** ...
- 学习pl/sql之一
--使用pl/sql语句打印一个hello world begin dbms_output.put_line('hello,world'); end; 但是在sqlplus里面就不一样了 ...
- 我的寒假C(C++)学习计划
前言 要补缺加强C语言的想法由来已久,上学期因为种种原因,某些知识点学习得不是很理想,而且,许多地方也有加强的必要,所以这次布置的随笔可谓是来得恰到好处. 学习材料 C Primer Plus 师爷的 ...
- 面向对象程序设计第三次作业-Calculator
题目: 最终代码: Scan.h: Print.h: Calaulator.cpp: 解题过程 看到题目后,在查询之后明白了这是多文件的题目,然后通过翁凯老师的视频讲解知道了.h和.cpp文件的区别和 ...
- arcgis for android apk太大
原来大概都要20多M, 太大的原来是.so文件 arcgis for android api里面有armeabi armeabi-v7a x86的 每个so都接近10m 要是都保留就20多m了 由于 ...
- “吃神么,买神么”的第一个Sprint计划(第三天)
“吃神么,买神么”项目Sprint计划 ——5.23 星期六(第三天)立会内容与进度 摘要:今天的立会主要是报告进度以及遇到的困难. 进度:logo正在进行中,其他基本没什么问题.都确定要做出来的大 ...
- angularJS1笔记-(10)-自定义指令(templateUrl属性)
index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- VS提示“无法启动IIS Express Web服务器”的解决方法
有时在使用Visual Studio运行项目时,会提示“无法启动IIS Express Web服务器”,如图: 可以依次尝试以下方法(我的情况使用第一种就解决了): 1.可能原因:误操作执行了:Sc ...
- 使用 Vagrant 打造跨平台开发环境fffff
Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史. 我们可以通过 Va ...