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. Daily Scrum4 11.6

    昨天的任务按时完成了,但是通过不到两周的时间,我们的工作依旧停留在修改上届学长代码中.今天上课和老师提出了这样的问题,助教在TFS上重新加载了10级学长的代码. 从上届学长代码那里我们发现,他们没有实 ...

  2. No.1100_第九次团队会议

    在今天项目有了新的突破,大家的情绪明显高涨了一些,一改往日的颓丧.但是仍然还有很多功能没有完善,于是大家相互交流了一下自己的进度,列出还没有完善的部分,有些困难的部分一时解决不了,我们决定多人合作来解 ...

  3. Hibernate笔记④--一级二级缓存、N+1问题、saveorupdate、实例代码

    一级缓存及二级缓存 一级缓存也是Session 缓存     一个链接用户的多次查询使用缓存     跨用户 则无缓存     hibernate自带的 get和load都会填充并利用一级缓存 二级缓 ...

  4. 2018软工实践—Beta冲刺(1)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Beta 冲鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调组内工作 调试服务器性能 展示GitHub当日代码/文档签入记录(组内 ...

  5. ssh框架配置数据源 数据库连接没有正常释放

    通过多天的改bug 对数据源这个东西了解多了..    我发现 spring+hibernate下  申请数据库连接是在一个action方法内  也就是说  action 里面有三个 service方 ...

  6. POJ 1239 Increasing Sequences 动态规划

    题目链接: http://poj.org/problem?id=1239 Increasing Sequences Time Limit: 1000MSMemory Limit: 10000K 问题描 ...

  7. 结对项目-四则运算出题程序(GUI版)

    目录: 一.致搭档(含项目地址) 二.PSP(planning) 三.结对编程中对接口的设计 四.计算模块接口的设计与实现过程 五.计算模块接口部分的性能改进 六.计算模块部分单元测试展示 七.计算模 ...

  8. requests爬取知乎话题和子话题

    zhihu.py # *_*coding:utf-8 *_* import pymysql import requests from lxml import etree from requests_t ...

  9. 【Linux笔记】linux crontab实现自动化任务

    在服务器中我们经常需要定时自动让程序自动进行数据备份.程序备份.执行某个进程等等操作,在linux服务器一般使用crontab实现,而windows下使用计划任务实现,crontab是linux系统下 ...

  10. get方式传递的数组