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. Microsoft Visual Studio 2013 的安装及单元测试

    题目:练习教科书第22~25页单元测试练习,要求自行安装Visual Studio开发平台,版本至少在2010以上,要求把程序安装过程和练习过程写到博客上,越详细越好,要图文并茂. 安装过程: 1.下 ...

  2. 四则运算<C++>

    代码: #include<iostream> #define N 30 using namespace std; void main() { cout<<"***** ...

  3. 学习pl/sql之一

    --使用pl/sql语句打印一个hello world begin   dbms_output.put_line('hello,world'); end;      但是在sqlplus里面就不一样了 ...

  4. 我的寒假C(C++)学习计划

    前言 要补缺加强C语言的想法由来已久,上学期因为种种原因,某些知识点学习得不是很理想,而且,许多地方也有加强的必要,所以这次布置的随笔可谓是来得恰到好处. 学习材料 C Primer Plus 师爷的 ...

  5. 面向对象程序设计第三次作业-Calculator

    题目: 最终代码: Scan.h: Print.h: Calaulator.cpp: 解题过程 看到题目后,在查询之后明白了这是多文件的题目,然后通过翁凯老师的视频讲解知道了.h和.cpp文件的区别和 ...

  6. arcgis for android apk太大

    原来大概都要20多M, 太大的原来是.so文件 arcgis for android api里面有armeabi armeabi-v7a  x86的 每个so都接近10m 要是都保留就20多m了 由于 ...

  7. “吃神么,买神么”的第一个Sprint计划(第三天)

    “吃神么,买神么”项目Sprint计划 ——5.23  星期六(第三天)立会内容与进度 摘要:今天的立会主要是报告进度以及遇到的困难. 进度:logo正在进行中,其他基本没什么问题.都确定要做出来的大 ...

  8. angularJS1笔记-(10)-自定义指令(templateUrl属性)

    index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  9. VS提示“无法启动IIS Express Web服务器”的解决方法

    有时在使用Visual Studio运行项目时,会提示“无法启动IIS Express Web服务器”,如图: 可以依次尝试以下方法(我的情况使用第一种就解决了): 1.可能原因:误操作执行了:Sc ...

  10. 使用 Vagrant 打造跨平台开发环境fffff

    Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史. 我们可以通过 Va ...