题目链接:https://www.luogu.org/problemnew/show/P4711

要细心模拟

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
using namespace std;
char s[10001];
int k;
double nans1, nans2, fans, ffans, nans3, nans4;
double koushu(char a, char b)
{
if(a == 'A')
{
if(b == 'g')
return 108;
if(b == 'u')
return 197;
if(b == 'l')
return 27;
}
if(a == 'H')
{
if(b == '#')
return 1;
if(b == 'g')
return 201;
if(b == 'f')
return 178.5;
}
if(a == 'C')
{
if(b == '#')
return 12;
if(b == 'l')
return 35.5;
if(b == 'a')
return 40;
if(b == 'u')
return 64;
}
if(a == 'N')
{
if(b == '#')
return 14;
if(b == 'a')
return 23;
}
if(a == 'O')
{
if(b == '#')
return 16;
}
if(a == 'F')
{
if(b == '#')
return 19;
if(b == 'e')
return 56;
}
if(a == 'M')
{
if(b == 'g')
return 24;
if(b == 'n')
return 55;
}
if(a == 'S')
{
if(b == 'i')
return 28;
if(b == '#')
return 32;
}
if(a == 'P')
{
if(b == '#')
return 31;
if(b == 't')
return 195;
}
if(a == 'K')
{
if(b == '#')
return 39;
}
if(a == 'Z')
{
if(b == 'n')
return 65;
}
if(a == 'I')
{
if(b == '#')
return 127;
}
if(a == 'B')
{
if(b == 'a')
return 137;
}
}
bool flag = 0;
int main()
{
cin>>s;
int len = strlen(s);
for(int i = 0; i < len; i++)
{
if(s[i] == '~')
{
if(s[i+1] > 48 && s[i+1] <= 57 && s[i+2] >= 48 && s[i+2] <= 57)
{
ffans = 18*(10*(s[i+1]-'0')+s[i+2]-'0');
fans += ffans;
break;
}//十位数的水
else if(s[i+1] > 48 && s[i+1] <= 57)
{
ffans = 18*(s[i+1]-'0');
fans += ffans;
break;
}//个位数的水
else if(s[i+1] == 'H')
{
ffans += 18;
fans += ffans;
break;
}//一个水
} if(s[i] == '(') // 抠括号里的
{
for(int j = i+1; s[j] != ')'; j++)
{
if((s[j] >= 65 && s[j] <= 90) &&(s[j+1] >= 97 && s[j+1] <= 122))
{
nans3 += koushu(s[j],s[j+1]);
if(s[j+2] == '_')
nans3 = nans3*(s[j+4]-'0');
nans1 += nans3;
nans3 = 0;
}
if((s[j] >= 65 && s[j] <= 90) &&(s[j+1] <= 97 || s[j+1] >= 122))
{
nans4 += koushu(s[j],'#');
if(s[j+1] == '_')
nans4 = nans4*(s[j+3]-'0');
nans1 += nans4;
nans4 = 0;
}
k = j;
i = j+1;//处理完括号,把i调到下一位,否则会重复加
}
if(s[k+2] == '_')
nans1 = nans1*(s[k+4]-'0');
fans += nans1;
nans1 = 0;
}
if((s[i] >= 65 && s[i] <= 90) &&(s[i+1] >= 97 && s[i+1] <= 122))
{
nans2 += koushu(s[i],s[i+1]);
if(s[i+2] == '_')
nans2 = nans2*(s[i+4]-'0');
fans += nans2;
nans2 = 0;
continue;
} if((s[i] >= 65 && s[i] <= 90) &&(s[i+1] <= 97 || s[i+1] >= 122))
{
nans2 += koushu(s[i],'#');
if(s[i+1] == '_')
nans2 = nans2*(s[i+3]-'0');
fans += nans2;
nans2 = 0;
continue;
}
}
cout<<fans;
return 0;
}

【luogu P4711 「化学」相对分子质量】 题解的更多相关文章

  1. P4711 「化学」相对分子质量

    P4711 「化学」相对分子质量 给你一个字符串让你输出相对分子质量(弱智字符串模拟) 我比赛tm调了两个半小时啊QAQ 希望以后能增加代码力吧,纪念挂代码 Code #include<iost ...

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

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

  3. LOJ #2116 Luogu P3241「HNOI2015」开店

    好久没写数据结构了 来补一发 果然写的时候思路极其混乱.... LOJ #2116 Luogu P3241 题意 $ Q$次询问,求树上点的颜色在$ [L,R]$中的所有点到询问点的距离 强制在线 询 ...

  4. LOJ #2547 Luogu P4517「JSOI2018」防御网络

    好像也没那么难写 LOJ #2547 Luogu P4517 题意 在一棵点仙人掌中等概率选择一个点集 求选出点集的斯坦纳树大小的期望 定义点仙人掌为不存在一个点在多个简单环中的连通图 斯坦纳树为在原 ...

  5. LOJ#2249 Luogu P2305「NOI2014」购票

    几乎肝了半个下午和整个晚上 斜率优化的模型好多啊... LOJ #2249 Luogu P2305 题意 给定一棵树,第$ i$个点如果离某个祖先$ x$的距离不超过$ L_i$,可以花费$ P_i· ...

  6. LOJ #2527 Luogu P4491「HAOI2018」染色

    好像网上没人....和我推出....同一个式子啊..... LOJ #2527 Luogu P4491 题意 $ n$个格子中每个格子可以涂$ m$种颜色中的一种 若有$ k$种颜色恰好涂了$ s$格 ...

  7. Luogu P2490「JSOI2016」黑白棋

    我博弈基础好差.. Luogu P2490 题意 有一个长度为$ n$的棋盘,黑白相间的放$ k$个棋子,保证$ k$是偶数且最左边为白子 每次小$ A$可以移动不超过$ d$个白子,然后小$ B$可 ...

  8. 「MCOI-03」村国题解

    第二篇题解! 可能是退役之前的最后一篇题解了 (好像总共都只写了两篇) 不说了,讲题: 题面 题意: 有T个数据 有一颗树(保证所有的的节点都是相连的),有n个节点,每个节点都有相应的权值与序号,现在 ...

  9. Luogu P3700「CQOI2017」小Q的表格

    为什么我连分块都想不到啊... 题意 定义一个矩阵$f$满足 $ f(a,b)=f(b,a)$ $ b·f(a,a+b)=(a+b)·f(a,b)$ 初始$ f(a,b)=ab$ 有$ m$次修改,每 ...

随机推荐

  1. innosetup的静默安装与卸载

    静默安装,就是减少程序与用户的交互,一站式的安装过程(一气呵成) 1. 静默安装参数 innosetup的静默安装是通过参数来控制的 1.1.  /silent                     ...

  2. php+editplus构建php调试环境

    配置Editplus的PHP调试环境 1. php手册 1.1 打开Editplus进入菜单 [Tools] -> [Configure User Tools...]. 1.2 点击按钮 [Ad ...

  3. UiPath进阶

    最近RPA比较火,UiPath工具排名前几位并且免费试用,很多朋友们都选择了学习自动化工具UiPath,今天我就向大家介绍一下UiPath的学习过程,希望对后来的学习这个工具的人有所帮助. UiPat ...

  4. VS2015自定义类模板的方法

    在前一段时间忽然想给自己电脑上的vs新建类的时候添加一个自定义个注释,但是在网上搜了很久都是说vs2012之类的方法系统也都是win7.XP之类的独独没有win8的.故此自己不断的尝试修改发现方法如下 ...

  5. idea 正则全局替换文件文本

    上一遍写到了log4j2分层输出日志的内容,但因为项目原先采用的log4j,现使用log4j2,需将原有log4j的代码进行替换,以前的代码类似如下: private static final Log ...

  6. OLEDB不使用SQL语句直接打开数据表

    一般来说获取数据库表的方法是采用类似 select * from table_name 这样的sql语句.SQL语句必然伴随着数据库的解释执行,一般来说效率比较低下,而且使用SQL语句时需要数据库支持 ...

  7. asp: AJAX Database

    <% @LANGUAGE="VBSCRIPT" CODEPAGE="65001" %> <!DOCTYPE html PUBLIC " ...

  8. CRM——起步

    一.CRM简介 crm 客户关系管理软件 ( Customer Relationship Management ). 二.CRM起步 1.设计表结构和数据库迁移 from django.db impo ...

  9. css3制作有动画效果的面板

    .show-panel .slide-panels{ right: 0px; } .slide-panels{ z-index: 101; background: #fff; position: fi ...

  10. 在Windows 7 上安装 Mapnik

    环境: 1.Windows 7_64位 2.Python 2.7_32位 步骤: 1.下载 Mapnik SDK   http://mapnik.org/download/  我下载的是  Windo ...