【luogu P4711 「化学」相对分子质量】 题解
题目链接: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 「化学」相对分子质量】 题解的更多相关文章
- P4711 「化学」相对分子质量
P4711 「化学」相对分子质量 给你一个字符串让你输出相对分子质量(弱智字符串模拟) 我比赛tm调了两个半小时啊QAQ 希望以后能增加代码力吧,纪念挂代码 Code #include<iost ...
- 【洛谷】【模拟+栈】P4711 「化学」相对分子质量
[题目传送门:] [戳] (https://www.luogu.org/problemnew/show/P4711) [算法分析:] 关于一个分子拆分后的产物,一共有三种情况: 原子 原子团 水合物 ...
- LOJ #2116 Luogu P3241「HNOI2015」开店
好久没写数据结构了 来补一发 果然写的时候思路极其混乱.... LOJ #2116 Luogu P3241 题意 $ Q$次询问,求树上点的颜色在$ [L,R]$中的所有点到询问点的距离 强制在线 询 ...
- LOJ #2547 Luogu P4517「JSOI2018」防御网络
好像也没那么难写 LOJ #2547 Luogu P4517 题意 在一棵点仙人掌中等概率选择一个点集 求选出点集的斯坦纳树大小的期望 定义点仙人掌为不存在一个点在多个简单环中的连通图 斯坦纳树为在原 ...
- LOJ#2249 Luogu P2305「NOI2014」购票
几乎肝了半个下午和整个晚上 斜率优化的模型好多啊... LOJ #2249 Luogu P2305 题意 给定一棵树,第$ i$个点如果离某个祖先$ x$的距离不超过$ L_i$,可以花费$ P_i· ...
- LOJ #2527 Luogu P4491「HAOI2018」染色
好像网上没人....和我推出....同一个式子啊..... LOJ #2527 Luogu P4491 题意 $ n$个格子中每个格子可以涂$ m$种颜色中的一种 若有$ k$种颜色恰好涂了$ s$格 ...
- Luogu P2490「JSOI2016」黑白棋
我博弈基础好差.. Luogu P2490 题意 有一个长度为$ n$的棋盘,黑白相间的放$ k$个棋子,保证$ k$是偶数且最左边为白子 每次小$ A$可以移动不超过$ d$个白子,然后小$ B$可 ...
- 「MCOI-03」村国题解
第二篇题解! 可能是退役之前的最后一篇题解了 (好像总共都只写了两篇) 不说了,讲题: 题面 题意: 有T个数据 有一颗树(保证所有的的节点都是相连的),有n个节点,每个节点都有相应的权值与序号,现在 ...
- 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$次修改,每 ...
随机推荐
- 《X86汇编语言:从实模式到保护模式》读书笔记之引言
有幸结识了<X86汇编语言:从实模式到保护模式>一书.我觉得这本书非常好,语言活泼,通俗易懂,源码丰富,受益匪浅.读罢一遍,意犹未尽.于是打算再读一遍,并把自己的读书所学总结成笔记,一来给 ...
- Apache-Maven 的安装及配置
一. 下载 没有 Maven 的朋友可以去 Apache 的官网下载一个 Maven, Apache-Maven 官网下载 : https://maven.apache.org/download.cg ...
- input placeholder 在chrome 浏览器自动填充时,背景色覆盖原有背景图片问题。
user-block-name, .user-block-pwd { margin-bottom: 10%; text-align: center; position: relative; } .us ...
- vue+mock.js+element-ui模拟数据搞定分页
效果如图: 前提是搭好vue前端框架,npm install mockjs引入mock.js 当前页全部代码如下,其他有关element-ui的引入未提到,仅作参考用 <!-- 用户管理 --& ...
- js添加、修改、删除xml节点例子
version="1.0" encoding="gb2312"?> . <bookstore> . <book genre=" ...
- 详解JavaScript UTC时间转换方法
这篇文章主要介绍了JavaScript UTC时间转换方法,介绍了本地时间到UTC时间的转换.UTC日期到本地日期的转换,感兴趣的小伙伴们可以参考一下 一.前言 1.UTC: Universal Ti ...
- C语言腾讯课堂(一)
腾讯课堂:c语言从零到精通 1. 从第一个例子开始 #include <stdio.h> int main(void) { printf("hello, qin men \n&q ...
- apk接入google play邮箱登陆及充值注意事项
unity3d 接入google play商店相关sdk,相关要求A.环境配置: 1.手机安装谷歌安装器 2.使用谷歌安装器安装Google 服务框架.Google Play服务.Google Pla ...
- 应用——dubbo的基本使用
一.背景 dubbo是个什么? 首先要说的是,网上有很多高大上的回答,可自行百度,这里只说一些非常狭隘的东西: dubbo是一个分布式服务框架,我们一般用它进行远程方法调用.(分布式.远程方法调用下面 ...
- ORACLE_FUNCTION
FUNCTION: DEFINE:函数一般用于计算和返回一个值,可以将经常需要使用的计算或功能写成一个函数. 1.basic syntax create [or replace] function f ...