博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Common Subexpression Elimination UVA - 12219 (表达式树)
阅读量:5745 次
发布时间:2019-06-18

本文共 1072 字,大约阅读时间需要 3 分钟。

Common Subexpression Elimination

 

 

题目大意:给出一段表达式,并让其中的重复部分用序号来代替

思路:首先针对表达式构建出表达式树,对于出现过了的子树用map储存,再在打印时用一个vis数组来记录这个序号的子树是否打印过了,如果已经打印过了,那么就打印其序号。

AC代码:

#include
#include
#include
#include
#include
using namespace std;const int size=1e6+5;struct node{ int Hash; int l; int r; string s; node(int Hash=0,int l=-1,int r=-1,string s=""):Hash(Hash),l(l),r(r),s(s){} friend bool operator<(node a,node b) { if(a.Hash!=b.Hash) return a.Hash
mp;int p=0;int cnt;string ori;int build(){ int id=cnt++; Node[id].Hash=0; Node[id].l=-1; Node[id].r=-1; Node[id].s=""; while(ori[p]>='a'&&ori[p]<='z'){ Node[id].Hash=Node[id].Hash*26+ori[p]-'a'+1; Node[id].s.push_back(ori[p]); p++; } if(ori[p]=='(') { p++; Node[id].l=build(),p++; Node[id].r=build(),p++; } if(mp.count(Node[id])){ cnt--; return mp[Node[id]]; } return mp[Node[id]]=id;}void print(int id){ if(vis[id]){ printf("%d",id+1); return ; } vis[id]=true; cout<
>ori; print(build()); cout<

 

转载于:https://www.cnblogs.com/fly-white/p/10092712.html

你可能感兴趣的文章
滚动条滑至底部自动加载内容
查看>>
智能追录器——基于人脸识别,图像处理,机器人视觉交叉领域
查看>>
阿里云Quick BI——让人人都成为分析师
查看>>
传输层协议、应用层协议
查看>>
python -m json.tool 中文乱码 Format JSON with python
查看>>
在条码打印软件中怎样添加剪切线
查看>>
分层思想
查看>>
Sangfor_NGAF学习笔记2
查看>>
python学习笔记
查看>>
时间戳数字和时间字符串的相互转换
查看>>
SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
查看>>
实验:新增硬盘、MBR分区、制作文件系统并挂载使用
查看>>
oracle字符集
查看>>
模拟qsort实现冒泡排序
查看>>
Maven在linux环境下批量清除.lastUpdated文件
查看>>
如何用思维导图提高阅读效率?分享高效阅读思维导图模板及绘制技巧
查看>>
Oracle 调整实例参数减少 I/O请求
查看>>
oracle数据库面试题_oracle数据库面试
查看>>
Oracle 11g统计信息方面增强(二)
查看>>
Windows平台下MySQL常用操作与命令(1)
查看>>