http://oj55.bianchengla.com/problem/623/

  好久没写过题解了,昨天做了一道挺恶心的题目,贴一下代码上来。看了一下提交状况,好像我的代码挺短的了,至少我找不到比我短的代码。RE1,AC。

代码如下:

  1. #include <cctype>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <map>
  5. #include <string>
  6. #include <iostream>
  7. #include <algorithm>
  8.  
  9. using namespace std;
  10.  
  11. const int N = ;
  12. char buf[N], *p[];
  13. typedef long long LL;
  14. typedef map<string, LL> MSL;
  15. #define x first
  16. #define y second
  17.  
  18. string get_s(int x) {
  19. string ret = "";
  20. ret += *(p[x]++);
  21. while (islower(*p[x])) ret += *p[x], p[x]++;
  22. return ret;
  23. }
  24.  
  25. int get_d(int x) {
  26. int ret = ;
  27. while (isdigit(*p[x])) ret = ret * + *p[x] - '', p[x]++;
  28. return ret;
  29. }
  30.  
  31. MSL merge(MSL a, MSL b) {
  32. MSL c;
  33. for (MSL::iterator mi = a.begin(); mi != a.end(); mi++) c[mi->x] += mi->y;
  34. for (MSL::iterator mi = b.begin(); mi != b.end(); mi++) c[mi->x] += mi->y;
  35. return c;
  36. }
  37.  
  38. void print(MSL &a) { for (MSL::iterator mi = a.begin(); mi != a.end(); mi++) cout << mi->x << '~' << mi->y << ' '; cout << endl; }
  39. void multiply(MSL &a, LL p) { for (MSL::iterator mi = a.begin(); mi != a.end(); mi++) mi->y *= p; }
  40.  
  41. MSL dfs(int x, char end) {
  42. MSL cur;
  43. //cout << x << ' ' << p[x] << endl;
  44. while (*p[x] && *p[x] != end && *p[x] != ')') {
  45. //cout << x << ' ' << *p[x] << endl;
  46. if (*p[x] == '+') { p[x]++; continue; }
  47. if (isdigit(*p[x])) {
  48. int t = get_d(x);
  49. MSL tmp = dfs(x, '+');
  50. multiply(tmp, t);
  51. cur = merge(cur, tmp);
  52. } else {
  53. if (*p[x] == '(') {
  54. p[x]++; MSL tmp = dfs(x, ')');
  55. if (*p[x] == ')') p[x]++;
  56. if (isdigit(*p[x])) multiply(tmp, get_d(x));
  57. cur = merge(cur, tmp);
  58. } else {
  59. string s = get_s(x);
  60. if (isdigit(*p[x])) cur[s] += get_d(x);
  61. else cur[s]++;
  62. }
  63. }
  64. }
  65. return cur;
  66. }
  67.  
  68. int main() {
  69. //freopen("in", "r", stdin);
  70. while (~scanf("%s", buf)) {
  71. p[] = p[] = buf;
  72. while (*p[] != '=') p[]++; *(p[]++) = ;
  73. MSL ans1, ans2, tmp;
  74. while () {
  75. tmp = dfs(, '+');
  76. ans1 = merge(ans1, tmp);
  77. if (*p[] == ) break;
  78. p[]++;
  79. //cout << p[0] << endl;
  80. }
  81. while () {
  82. tmp = dfs(, '+');
  83. ans2 = merge(ans2, tmp);
  84. if (*p[] == ) break;
  85. p[]++;
  86. //cout << p[1] << endl;
  87. }
  88. MSL::iterator m1 = ans1.begin(), m2 = ans2.begin();
  89. //print(ans1); print(ans2);
  90. while () {
  91. if (m1 == ans1.end()) break;
  92. if (m2 == ans2.end()) break;
  93. if (*m1 != *m2) break;
  94. m1++, m2++;
  95. }
  96. m1 == ans1.end() && m2 == ans2.end() ? puts("YES") : puts("NO");
  97. }
  98. return ;
  99. }

——written by Lyon

BUAA 623 Chem is Try!的更多相关文章

  1. Buaa菜鸡从今天好好学打码,好好学数学,好好学英语,好好打篮球,好好锻炼,好好吃饭,好好... 好好找女朋友!

    新链接: https://iamparasite.github.io/

  2. #CSDN刷票门# 有没有人在恶意刷票?CSDN请告诉我!用24小时监控数据说话!

    特别声明: 此次并非针对其他参与2013中国十大优秀开源项目的同行,体系有漏洞要谴责的是制定规则并从中获益但不作为的权贵,草根们制定不了规则但可发现和利用漏洞,这是程序员应有反叛精神没错.但被作为道具 ...

  3. BUAA & ICT 夏令营之旅

    我还只有二十几岁,总应该相信点什么吧. ================================ 7.10午后坐火车赶到北京.一路上火车行驶在茫茫云海里.车窗外的世界是这样子的:一片广袤的原野 ...

  4. 開賣!下集 -- ASP.NET 4.5 專題實務(II)-範例應用與 4.5新功能【VB/C# 雙語法】

    開賣!下集 -- ASP.NET 4.5 專題實務(II)-範例應用與 4.5新功能[VB/C# 雙語法] 我.....作者都沒拿到書呢! 全台灣最專業的電腦書店 -- 天瓏書局 已經開賣了! 感謝天 ...

  5. 【BUAA软件工程】第一次阅读作业

    BUAA软件工程 第一次阅读作业 项目 内容 这个作业属于哪个课程? 北航软工 这个作业的要求在哪里? 第一次个人作业 我在这个课程的目标是? 学习高效严谨的软件工程开发过程,建立团队意识 这个作业在 ...

  6. [BUAA软工]第1次阅读

    [BUAA软工]第1次阅读 本次作业所属课程: 2019BUAA软件工程 本次作业要求: 第1次个人作业 我在本课程的目标 熟悉和实践软件工程流程,适应团队开发 本次作业的帮助 帮助理解<构建之 ...

  7. [BUAA软工]第一次博客作业---阅读《构建之法》

    [BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...

  8. 线上问题!----------org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe

    1.问题出现 昨晚项目在上线的时候因为推广的原因,新增的大量请求.在八点的时候. org.apache.catalina.connector.ClientAbortException: java.io ...

  9. [BUAA软工]第零次博客作业---问题回答

    [BUAA软工]第0次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第0次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...

随机推荐

  1. git学习记录——基础概念和文件的基本操作

    夸一下git git是当前世界上最先进的分布式版本控制系统 优势: 1.不必联网 2.Git极其强大的分支管理,把SVN等远远抛在了后面. 集中式的代表CVS和SVN 分布式的代表BitKeeper, ...

  2. web端的兼容性测试

    目前主流的浏览器有:chrome.firefox.safari.IE edge.Opera等.其中IE edge ,Google浏览器 和firefox被称为现代浏览器. 浏览器排行榜2019年4月浏 ...

  3. 20190815-$N \Theta IP$

    $NOIP$ 请选择您想测试的难度: 「困难」 「困难的地狱」 「能被神犇切掉的」 「你做不出来的」 「简单(完成前面所有后解锁)」 要难死了-- 考试过程: 首先看看三道题: 这是NOIP模拟测试? ...

  4. Asp.Net Core2.0在linux下发布

    一.在linux上新建mvc项目发布 可以参考:https://segmentfault.com/a/1190000012428781 也可以看微软官方文档. 大致步骤如下: 1.在linux下安装. ...

  5. beego应用做纯API后端如何使用jwt实现无状态权限验证

    jwt是什么,可以百度下其它文章,我原来看到一个讲的详细的,现在找不到了.先简单介绍下我个人的理解,就是一个token,只不过通过加密解密的手段,能让这一串字符带有一些简单的信息.这样解密jwt后不用 ...

  6. springmvc报404错误No mapping found for HTTP request with URI [/mavenSpringmvc/requesttest] in DispatcherServlet with name 'spring'

    问题404错误的原因有很多种 有这种,后边不带url的 这种一般就是没有进入到controller中 可以在toncat中看到信息 十一月 12, 2018 12:21:25 下午 org.sprin ...

  7. js实现放大镜特效的实现方法

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  8. select @@identity的用法 转

    用select @@identity得到上一次插入记录时自动产生的ID 如果你使用存储过程的话,将非常简单,代码如下:SET @NewID=@@IDENTITY 说明: 在一条 INSERT.SELE ...

  9. Celery-一个会做异步任务,定时任务的芹菜

    Celery 分布式任务队列 同步与异步 比如说你要去一个餐厅吃饭,你点完菜以后假设服务员告诉你,你点的菜,要两个小时才能做完,这个时候你可以有两个选择 一直在餐厅等着饭菜上桌 你可以回家等着,这个时 ...

  10. MVC开发模式与web经典三层框架

    MVC:Model(模型)-View(视图)-Controller(控制器) ----是一种软件架构模式,一般把软件系统拆分为这三个层次. 视图View层:前端交互界面或者后端系统界面,它从模型中获取 ...