题目链接: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. Hsl PLC

    https://github.com/dathlin/HslCommunication 地址

  2. DotNetCore跨平台~xUnit和测试报告

    在进入dotnet core时代之后,测试驱动开发TDD的主要工具不再是微软的nunit,取而代之的是更通用的xunit,微软把它集成到了dotnetcore的项目里,在安装完成vs2017之后,你可 ...

  3. 转-------CNN图像相似度匹配 2-channel network

    基于2-channel  network的图片相似度判别 原文地址:http://blog.csdn.net/hjimce/article/details/50098483 作者:hjimce 一.相 ...

  4. 面试题-Java设计模式举例

    面试题-Java设计模式举例 1.适配器模式 涉及三个角色:Target目标接口.Adaptee源角色.Adapter适配器:Adapter将源接口适配到目标接口,继承源接口,实现目标接口. Java ...

  5. 经典算法详解(1)斐波那契数列的n项

    斐波那契数列是一个常识性的知识,它指的是这样的一个数列,它的第一项是1,第二项是1,后面每一项都是它前面两项的和,如:1,1,2,3,5,8,13,21,34,55,89,144,233…… 说明:由 ...

  6. Javascript “等于”

    JavaScript支持“=”.“==”和“===”运算符. 我们应当理解这些(赋值.相等.恒等)运算符之间的区别,并在编码过程中小心使用. == equality 等同,用于一般比较,在比较的时候可 ...

  7. (五)html部分标签元素补充

    html标签元素十分的多,一次性掌握全部,那是不可能的,在后续的学习中,会不断补充标签元素... 1.行元素和块元素 行标签元素即是标签元素根据内容大小进行自适应,而不是占据一整行. 如<spa ...

  8. hdu 1087 最大递增和

    思路和LIS差不多,dp[i]为i结尾最大值 #include <iostream> #include <string> #include <cstring> #i ...

  9. 前端自动分环境打包(vue和ant design)

    现实中的问题:有时候版本上线的时候,打包时忘记切换环境,将测试包推上正式服务器,那你就会被批了. 期望:在写打包的命令行的时候就觉得自己在打包正式版本,避免推包时候的,不确信自己的包是否正确. 既然有 ...

  10. 【linux学习笔记】began,每次玩这个都特别着迷

    胡乱的安装,通过虚拟机,从DVD加载开始,当然网上有大段的装机教程,装了两个Linux发行版,一个是centos7,一个是ubuntu18.04. 分区那些事: 因为处于学习阶段,所以总是因为分区问题 ...