BUAA 623 Chem is Try!
http://oj55.bianchengla.com/problem/623/
好久没写过题解了,昨天做了一道挺恶心的题目,贴一下代码上来。看了一下提交状况,好像我的代码挺短的了,至少我找不到比我短的代码。RE1,AC。
代码如下:
#include <cctype>
#include <cstdio>
#include <cstring>
#include <map>
#include <string>
#include <iostream>
#include <algorithm> using namespace std; const int N = ;
char buf[N], *p[];
typedef long long LL;
typedef map<string, LL> MSL;
#define x first
#define y second string get_s(int x) {
string ret = "";
ret += *(p[x]++);
while (islower(*p[x])) ret += *p[x], p[x]++;
return ret;
} int get_d(int x) {
int ret = ;
while (isdigit(*p[x])) ret = ret * + *p[x] - '', p[x]++;
return ret;
} MSL merge(MSL a, MSL b) {
MSL c;
for (MSL::iterator mi = a.begin(); mi != a.end(); mi++) c[mi->x] += mi->y;
for (MSL::iterator mi = b.begin(); mi != b.end(); mi++) c[mi->x] += mi->y;
return c;
} void print(MSL &a) { for (MSL::iterator mi = a.begin(); mi != a.end(); mi++) cout << mi->x << '~' << mi->y << ' '; cout << endl; }
void multiply(MSL &a, LL p) { for (MSL::iterator mi = a.begin(); mi != a.end(); mi++) mi->y *= p; } MSL dfs(int x, char end) {
MSL cur;
//cout << x << ' ' << p[x] << endl;
while (*p[x] && *p[x] != end && *p[x] != ')') {
//cout << x << ' ' << *p[x] << endl;
if (*p[x] == '+') { p[x]++; continue; }
if (isdigit(*p[x])) {
int t = get_d(x);
MSL tmp = dfs(x, '+');
multiply(tmp, t);
cur = merge(cur, tmp);
} else {
if (*p[x] == '(') {
p[x]++; MSL tmp = dfs(x, ')');
if (*p[x] == ')') p[x]++;
if (isdigit(*p[x])) multiply(tmp, get_d(x));
cur = merge(cur, tmp);
} else {
string s = get_s(x);
if (isdigit(*p[x])) cur[s] += get_d(x);
else cur[s]++;
}
}
}
return cur;
} int main() {
//freopen("in", "r", stdin);
while (~scanf("%s", buf)) {
p[] = p[] = buf;
while (*p[] != '=') p[]++; *(p[]++) = ;
MSL ans1, ans2, tmp;
while () {
tmp = dfs(, '+');
ans1 = merge(ans1, tmp);
if (*p[] == ) break;
p[]++;
//cout << p[0] << endl;
}
while () {
tmp = dfs(, '+');
ans2 = merge(ans2, tmp);
if (*p[] == ) break;
p[]++;
//cout << p[1] << endl;
}
MSL::iterator m1 = ans1.begin(), m2 = ans2.begin();
//print(ans1); print(ans2);
while () {
if (m1 == ans1.end()) break;
if (m2 == ans2.end()) break;
if (*m1 != *m2) break;
m1++, m2++;
}
m1 == ans1.end() && m2 == ans2.end() ? puts("YES") : puts("NO");
}
return ;
}
——written by Lyon
BUAA 623 Chem is Try!的更多相关文章
- Buaa菜鸡从今天好好学打码,好好学数学,好好学英语,好好打篮球,好好锻炼,好好吃饭,好好... 好好找女朋友!
新链接: https://iamparasite.github.io/
- #CSDN刷票门# 有没有人在恶意刷票?CSDN请告诉我!用24小时监控数据说话!
特别声明: 此次并非针对其他参与2013中国十大优秀开源项目的同行,体系有漏洞要谴责的是制定规则并从中获益但不作为的权贵,草根们制定不了规则但可发现和利用漏洞,这是程序员应有反叛精神没错.但被作为道具 ...
- BUAA & ICT 夏令营之旅
我还只有二十几岁,总应该相信点什么吧. ================================ 7.10午后坐火车赶到北京.一路上火车行驶在茫茫云海里.车窗外的世界是这样子的:一片广袤的原野 ...
- 開賣!下集 -- ASP.NET 4.5 專題實務(II)-範例應用與 4.5新功能【VB/C# 雙語法】
開賣!下集 -- ASP.NET 4.5 專題實務(II)-範例應用與 4.5新功能[VB/C# 雙語法] 我.....作者都沒拿到書呢! 全台灣最專業的電腦書店 -- 天瓏書局 已經開賣了! 感謝天 ...
- 【BUAA软件工程】第一次阅读作业
BUAA软件工程 第一次阅读作业 项目 内容 这个作业属于哪个课程? 北航软工 这个作业的要求在哪里? 第一次个人作业 我在这个课程的目标是? 学习高效严谨的软件工程开发过程,建立团队意识 这个作业在 ...
- [BUAA软工]第1次阅读
[BUAA软工]第1次阅读 本次作业所属课程: 2019BUAA软件工程 本次作业要求: 第1次个人作业 我在本课程的目标 熟悉和实践软件工程流程,适应团队开发 本次作业的帮助 帮助理解<构建之 ...
- [BUAA软工]第一次博客作业---阅读《构建之法》
[BUAA软工]第一次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第1次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...
- 线上问题!----------org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe
1.问题出现 昨晚项目在上线的时候因为推广的原因,新增的大量请求.在八点的时候. org.apache.catalina.connector.ClientAbortException: java.io ...
- [BUAA软工]第零次博客作业---问题回答
[BUAA软工]第0次博客作业 项目 内容 这个作业属于哪个课程 北航软工 这个作业的要求在哪里 第0次个人作业 我在这个课程的目标是 学习如何以团队的形式开发软件,提升个人软件开发能力 这个作业在哪 ...
随机推荐
- Java review-design pattern
Design Patterns (Factory, Abstract Factory, singleton, DAO, Proxy): 1. Factory: In Factory pattern, ...
- 记录centos7下tomcat部署war包过程
记录centos7下tomcat部署war包过程 1.官网下载tomcat安装包.gz结尾的 2.上传到/usr/local/ ,并解压到tomcat目录下 3.进入tomcat/bin目录,运行./ ...
- 你需要一个新的model实体的时候必须new一个.奇怪的问题: 使用poi解析Excel的把数据插入数据库同时把数据放在一个list中,返回到页面展示,结果页面把最后一条数据显示了N次
数据库显示数据正常被插 插入一条打印一次数据,也是正常的,但是执行完,list就全部变成了最后一条数据.很奇怪 单步调试 给list插入第一条数据 model是6607 连续插了多条数据都是6607 ...
- ie6 png 透明的解决方法,大网站都在用
今天解决png图片在IE6下的背景透明问题,找到了一个好方法.之前的解决方案会造成错位,使页面变形.现把这个方法公布如下,本人亲测可以正常使用,如果你在使用中出现问题,请看实例中的说明(英文不精的童鞋 ...
- 猜数字游戏_Python
预先设置数字变量 age_of_test = 25 #这里设置为25,也可随意 guess_age = int (input("guess age:")) if guess_age ...
- Mybatis+Spring实现Mysql读写分离
使用spring AbstractRoutingDatasource实现多数据源 public class DynamicDataSource extends AbstractRoutingDataS ...
- const属性与容器元素排序
给容器里元素排序时,会破坏容器的const的属性:因此当你在一个函数传参的时候如果使用的是const T&:那么你在调用qt的qsort给容器排序的时候可能会遭遇一些看不懂的BUG提示 类似: ...
- Leetcode622.Design Circular Queue设计循环队列
设计你的循环队列实现. 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环.它也被称为"环形缓冲器". 循环队列的一个好处是 ...
- 转:解决Onethink上传视频的问题 超棒的解决方案
用过Onethink的都知道,它是不能上传视频的. 有人想到用上传附件的方式上传视频,但是结果……就是提示没有上传文件. 要是正常上传个一两兆的图片啊,压缩文件什么的还是可以的. 所以,重点来了 怎么 ...
- python利用Remove.bg接口自动去背景(转)
转 https://blog.csdn.net/Quentin_he/article/details/97569625 前段时间基友找我让帮忙把他的结婚登记照扣出来换一个背景当作简历照,好在我之前学过 ...