luogu的oier化学一定都很好

这个题是让我们模拟计算化学方程式的过程。

和时间复杂度类似的题目。

我们可以根据括号,将求解分成若干个步骤。

从外部看,需要将一对括号看做一个整体。然后进行计算。

从内部看,括号外面的下标对内部没有影响。

我们可以将给定的分子式,看做在一个大括号内。

然后写出一个函数,函数的作用就是求解某一个括号内的质量。

当然,这个函数很显然是递归的。递归就要用到栈。所以是隐形的开了栈。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
const int maxn=5000;
int T[maxn][100],tail;
int End[maxn];
char c[maxn];
void insert(char *A,int len,int w)
{int now=0;for(int i=1;i<=len;i++){int nxt=A[i]-'A';if(!T[now][nxt])    T[now][nxt]=++tail;now=T[now][nxt];}//trie树End[now]=w;return ;
}
int get(int &now,int len)
{int res=0,R=T[0][c[now++]-'A'];while(c[now]>='a'&&c[now]<='z')//还在一个原子内{int nxt=c[now]-'A';if(!T[R][nxt])  return -0x7fffffff;R=T[R][nxt];now++;}if(!End[R]) return -0x7fffffff;//没有这个原子,返回非法return End[R];//返回单个原子的质量
}
int calc(int &now,int len)
{int res=0;while(c[now]<='9'&&c[now]>='0'&&now<=len){res=res*10+c[now]-'0';now++;}//数字return res;
}
int dfs(int &now,int len)//
{int sum=0;//括号内原子的质量总和while(c[now]!=')'&&now<=len)//没有到右括号。PS:一次循环处理一个原子和其下标(若没有则不处理){int pas=0,x=1;//pas为原子质量,x为下标if(c[now]=='(')//遇到一个左括号pas=dfs(++now,len);//递归处理elseif(c[now]<'0'||c[now]>'9')pas=get(now,len);//计算原子质量if(c[now]==')'||pas<0)//后面没有下标而且到了右括号{sum+=pas;//加上,退出循环break;}if(c[now]>='0'&&c[now]<='9')x=calc(now,len);//计算下标sum+=pas*x;//相乘}now++;//越过右括号return sum;
}
int main()
{while(true){int weight;scanf("%s",c+1);scanf("%d",&weight);int len=strlen(c+1);if(c[1]=='E'&&c[2]=='N'&&c[3]=='D') break;insert(c,len,weight);}//输入元素while(true){scanf("%s",c+1);if(c[1]=='0')   break;//终止条件int len=strlen(c+1);//长度c[len+1]=')';//将整个分子式括号扩起来,只括右半部分的原因是,我写的函数,在所处理的括号的区间是左开右闭的。int n=1;int ans=dfs(n,len+1);if(ans<0)   printf("UNKNOWN\n");//不合法。else    printf("%d\n",ans);}//计算
}

附带:豪华大样例(当然可能有锅)

转载于:https://www.cnblogs.com/Lance1ot/p/9885863.html

P2382 化学分子式相关推荐

  1. Luogu P2382 化学分子式 (模拟)

    题目 题目背景 元首和元老正在共同努力学习化学,他们想让电脑帮助他模拟分子式减轻负担.请你帮他设计一个程序. 题目描述 你的任务是编写一个能处理在虚拟的化学里分子式的程序,在真正的化学里,每个分子式描 ...

  2. 用Smartforms实现化学分子式上下标动态打印

    最近开发QM模块的检验报告,客户提出要按上下标打印分子式(此需求有点变态),对我来说无疑是个挑战,经过自己的摸索花了两天时间终于攻破了此问题,在此要感谢华哥,Feliz,tc_Edison在这个问题上 ...

  3. 知识图谱实战应用16-知识图谱在化学物质结构上的应用,快速查找化学分子式与结构

    大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用16-知识图谱在化学物质结构上的应用,快速查找化学分子式与结构.在化学领域,知识图谱可以应用于化学物质结构上.化学物质结构主要指分子结构和化学键 ...

  4. 实验二 XML之数学公式和化学分子式

    依照运行结果图,编写出相应的XML和CSS文档. 现在有一个XML文档运行效果图,要求你根据这个图,把它的XML文档.CSS文档还原出来,该图如下. 实验步骤 分析  根据显示的结果,可以看到该文档有 ...

  5. 用化学绘图软件写带括号的分子式的方法

    ChemDraw是一款国际通用的化学绘制工具,广泛应用于绘制各种化学结构式,包括结构式.能量图谱.方程式.生物聚合物以及分子式等.对于化学分子式带括号的情况,学习化学的同学都司空见惯,但是你知道如何使 ...

  6. 实用化工计算机模拟-matlab在化学工程中的应用的光盘程序_这150款化工常用软件,你会用多少?...

    点击上方蓝字关注我们! 化工设计.计算过程通常都有专用的商业软件或者是工程公司自行开发的软件或者计算表格.大的设计公司通常也会指定公司用于以上设计过程的软件或经过确认的表格.下面小编就总结看看常用的那 ...

  7. 自然语言处理与化学的关系

    我是一名在校的应用化学专业的本科生,在选修课上得知了自然语言处理这一热门的技术话题,知道计算机语言更加强调让计算机懂我们人类要做的事,而不是让我们去了解计算机本身的语言,结合自身现在的知识,我说一下我 ...

  8. 宅生活健康助手:把化学清洁剂赶出家门

    宅在家里,最重要的就是环境洁净空气清新心情舒畅,但是我们的家庭为了面子干净,常常不得不依靠各种清洁剂,而这些清洁剂往往在我们的空气中埋伏下各种"化学残留",危险着我们的健康.所以行 ...

  9. 化学对计算机科学的,我对计算机化学的体会和感想.doc

    我对计算机化学的体会和感想 我对计算机化学的体会和感想 摘要:<计算机化学>课程是高校化学类学生在学了计算机基础课程后开设的, 在学生已掌握基本的计算机知识和技能后, 本课程主要培养学生利 ...

最新文章

  1. 上传文件 苹果系统选不了excel_每日一课 | 几个好用的Excel技巧,安利了(五)...
  2. acos1.2的下载及CentOS7下安装nacos1.2
  3. Rust中对某个结构体实现方法于rust中的关联函数
  4. R6饮料AK赛(NOIP模拟赛)/省选专练HDU 5713 K个联通块
  5. python编辑编程器_用Python制作编辑器
  6. 台式计算机的拆解与安装实验报告,计算机组成实验的实验报告
  7. win7 64位共享打印机
  8. VMware虚拟机克隆或复制linux后无法上网的解决方案
  9. linux内核配置打开声卡,配置树莓派/Linux默认声卡设备
  10. 08cms cecore.cls.php,08CMS 变量覆盖导致getshell 等问题
  11. FreeBSD搭建Nginx+Apache24+php56+mysql56手把手一步步的笔记
  12. android 时钟翻转,旋转时钟游戏
  13. 博世传感器调试笔记(一)----加速度传感器BMA253
  14. 史上绝地反击,美式英语英文学习大全。美国英语最新词频表
  15. 前沿资讯:索尼展现裸眼3D显示技术,阿里推出图计算平台……
  16. 完全数,丰沛数,不足数
  17. python sys.getsizeof 变量的大小
  18. OkHttpUtils | okhttp-OkGo的使用,完美支持RxJava
  19. 联想电脑如何取消触屏-thinkpad X230
  20. 那些困扰你多年的项目管理问题,终于有解决方案了!

热门文章

  1. python marshal loads failed_python使用marshal模块序列化实例
  2. 【转】BigInteger BigDecimal
  3. 仿闲鱼 拍摄小视频 videorecoder
  4. 单片机采用RLE算法实现液晶屏显示图片
  5. 华云大咖说 | 对象存储在金融行业的应用
  6. 非功能性需求设计:常见的质量属性有哪些?
  7. OCR技术探讨(三)
  8. 大神教你在 Linux 中查看你的时区
  9. 【★★★★★ 第6章 图总结笔记 2022 9.13】
  10. 微信小程序-打卡激励小程序—随笔录-tabber无效