题目链接: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. ife task0003学习笔记(三):JavaScript闭包

    一.this易错分析 在学习闭包的时候,有一个概念this很重要,关于this的理解,下面3种情况:this指向谁? fn.call(obj1); obj2.fn() fn() 答案是obj1 obj ...

  2. ElasticSearch:集群(Cluster),节点(Node),分片(Shard),Indices(索引),replicas(备份)之间关系

    [Cluster]集群,一个ES集群由一个或多个节点(Node)组成,每个集群都有一个cluster name作为标识----------------------------------------- ...

  3. centOS查看apache版本的命令

    在centOS 7下: 命令如下: httpd -v

  4. Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)

    一.Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session 1 2 3 4 5 ...

  5. bzoj 5329: [Sdoi2018]战略游戏

    Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏. 这款战略游戏的地图由n个城市以及m条连接这些城市的双向道路构成,并且从任意一个城市出发总能沿着 ...

  6. 统一latext在vsc的markdown+math和有道云笔记里的出发方式

    起因 前段时间在有道云笔记上写笔记,里面使用latex来记录数学符号,有道云的latex行内触发模式为 `$ latex $`, 之后我在visual studio code里面使用markdown+ ...

  7. java ReentrantLock Condition

    sychronized.wait.notify.notifyAll.sleep 在多线程环境下,为了防止多个线程同时调用同一个方法.修改同一份变量,造成数据读取结果混乱,可以使用synchronize ...

  8. 7、侧边栏:Menu

    1.单个侧边栏 导航的代码在分析源码的时候已经分析过了,下面只看他的一些应用与方法. /* ---示例代码----*/ <ion-menu [content]="mycontent&q ...

  9. mysql应用学习-windows(64位)安装和配置mysql(5.6.20)

    下载安装包MySQL Installer 下载地址1:http://dev.mysql.com/downloads/windows/installer/ 说明:官网当前版本 5.6.22:虽然只有32 ...

  10. springboot--数据库操作

    1.注意: 使用get,post提交时,使用form-data; 使用put提交方式,使用x-www-form-url-encoded,这是http的一种格式;