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. First scrum meeting report - 151017

    提要 今天开会主要是讨论一下北航MOOC客户端的具体要求和每个人的大致分工.会议后来还简单商讨了一下我们app的大致界面框架. 会议地点:大运村KFC 会议时间:2015年10月17日,15:00-1 ...

  2. Hibernate利用纯sql

    String hql = "select * from shop where shop.strid in(select strid from moneythreeshop where mon ...

  3. synchronized、锁、多线程同步的原理是咋样

    先综述个结论: 一般说的synchronized用来做多线程同步功能,其实synchronized只是提供多线程互斥,而对象的wait()和notify()方法才提供线程的同步功能. 一般说synch ...

  4. WinForm中DataGridView的全选与取消全选

    /// <summary> /// 全选 /// </summary> private void SelectAll() { //结束列表的编辑状态,否则可能无法改变Check ...

  5. CAS (1) —— Mac下配置CAS到Tomcat(服务端)

    CAS (1) -- Mac下配置CAS到Tomcat(服务端) tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 cas版本: cas4.1.2 cas-clie ...

  6. json 数组

    /** * 获取 选中的id * @returns {*} */function getCheckedList(){ var groups =[]; $("input[name='check ...

  7. debug阶段贡献分

    组名: 新蜂 组长: 武志远 组员: 宫成荣 谢孝淼 杨柳 李峤 项目名称: java俄罗斯方块NEO 发布时间:11.29 武志远 武志远 武志远 武志远 武志远 宫成荣 宫成荣 杨柳 宫成荣 宫成 ...

  8. ORACLE中 %TYPE 和 %ROWTYPE 的使用

    %TYPE 用在变量的声明里,用于取得表中的字段类型: %ROWTYPE 用于声明基于某个表的行类型: 示例: %ROWTYPE 使用 DECLARE      CURSOR pdct_cur     ...

  9. vue中的数据双向绑定

    学习的过程是漫长的,只有坚持不懈才能到达到自己的目标. 1.vue中数据的双向绑定采用的时候,数据劫持的模式.其实主要是用了Es5中的Object.defineProperty;来劫持每个属性的get ...

  10. [转帖]HTTPS的简单说明

    HTTPS(全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即 HTT ...