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 「化学」相对分子质量的更多相关文章

  1. 【洛谷】【模拟+栈】P4711 「化学」相对分子质量

    [题目传送门:] [戳] (https://www.luogu.org/problemnew/show/P4711) [算法分析:] 关于一个分子拆分后的产物,一共有三种情况: 原子 原子团 水合物 ...

  2. 【luogu P4711 「化学」相对分子质量】 题解

    题目链接:https://www.luogu.org/problemnew/show/P4711 要细心模拟 #include <cstdio> #include <algorith ...

  3. 《Offer一箩筐》一份高质量「简历」撰写指南,望打扰!!

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」. 如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! Hi~ 这里是 ...

  4. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  5. 一个「学渣」从零开始的Web前端自学之路

    从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的“丰富”. 最后的机缘巧合下,走上了前端开发之路,作为一个非计算机专业且低 ...

  6. 「NOI2018」你的名字

    「NOI2018」你的名字 题目描述 小A 被选为了\(ION2018\) 的出题人,他精心准备了一道质量十分高的题目,且已经 把除了题目命名以外的工作都做好了. 由于\(ION\) 已经举办了很多届 ...

  7. 「Sqlserver」数据分析师有理由爱Sqlserver之九-无利益关系推荐Sqlserver书单

    在前面系列文章的讲述下,部分读者有兴趣进入Sqlserver的世界的话,笔者不太可能在自媒体的载体上给予全方位的带领,最合适的方式是通过系统的书籍来学习,此篇给大家梳理下笔者曾经看过的自觉不错值得推荐 ...

  8. 每个程序员都可以「懂」一点 Linux

    提到 Linux,作为程序员来说一定都不陌生.但如果说到「懂」Linux,可能就没有那么多人有把握了.到底用 Linux 离懂 Linux 有多远?如果决定学习 Linux,应该怎么开始?要学到什么程 ...

  9. 「MoreThanJava」当大学选择了计算机之后应该知道的

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

随机推荐

  1. M1阶段的开发过程的一些反思

    今天八组队伍都做了项目的展示,和他们相比,我们的团队项目是显得最单薄的了,这里面的原因很多,固然我们团队整体的实力 比较弱,但是我们在M1项目开发过程中的种种错误表现也是导致我们项目失利的重要原因.下 ...

  2. java第三次实验报告

    北京电子科技学院(BESTI) 实验报告 课程: Java程序设计 班级: 1352 姓名: 池彬宁 学号: 20135212 成绩: 指导教师: 娄嘉鹏 实验日期: 2015.6.3 实验密级: 无 ...

  3. 再学HTML之一

    Html 超文本标记语言 什么是html? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言, ...

  4. Navicat for MySQL笔记1

    1.MySQL数据库的基本操作 A.系统数据库 安装MySQL数据库服务器后,自带的数据库. B.用户数据库 用户根据实际需求所创建的数据库. C.数据库对象 表.视图.存储过程.函数.触发器以及事件 ...

  5. 2D变换

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. Robot Framework 教程 (2) - 页面元素定位

    上一篇文章中,简单模拟了一个baidu搜索并截图的过程,在搜索过程中,我们需要对搜索框.搜索按钮进行定位.本篇文章主要介绍一下具体的定位方法. 我们的脚本如下: *** Settings *** Li ...

  7. 能把opencv的源码也进行调试吗?(需要pdb文件才行)

    能把opencv的源码也进行调试吗?(需要pdb文件才行)1.我是用的Qt Creator,然后"工具\选项\调试器\概要\源码路径映射"中,选择"添加Qt源码" ...

  8. 二分图最大匹配模板(pascal)

    uoj#78. 二分图最大匹配 从前一个和谐的班级,有 nlnl 个是男生,有 nrnr 个是女生.编号分别为 1,…,nl1,…,nl 和 1,…,nr1,…,nr. 有若干个这样的条件:第 vv  ...

  9. Python语言算法的时间复杂度和空间复杂度

    算法复杂度分为时间复杂度和空间复杂度. 其作用: 时间复杂度是指执行算法所需要的计算工作量: 而空间复杂度是指执行这个算法所需要的内存空间. (算法的复杂性体现在运行该算法时的计算机所需资源的多少上, ...

  10. Qt——基本工具的使用

    本文主要介绍在windows系统中使用C++编写Qt程序所需要的一些工具,不会具体地讲工具怎么使用. 其它系统的安装本文不会涉及,在http://wiki.qt.io/Main中,有关于各种系统qt安 ...