这道题看了刘汝佳的代码真的是天秀, 很值得学习。

具体看代码

#include<cstdio>
#include<iostream>
#include<cctype>
#include<map>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std; const int MAXN = 51234;
struct node
{
string s;
int l, r;
node(string s = "", int l = 0, int r = 0) : s(s), l(l), r(r) {}
bool operator < (const node& rhs) const //map用设置优先级
{
if(s != rhs.s) return s < rhs.s;
if(l != rhs.l) return l < rhs.l;
return r < rhs.r;
}
}s[MAXN];
map<node, int> g;
int done[MAXN], kase, cnt, k;
string str; int solve()
{
string cur;
while(isalpha(str[k])) cur += str[k++]; //string很方便, 当作一个数直接加就ok了
int id = ++cnt; //不知道要不要的时候先预留一个id, 然后不要cnt--, 很轻松就删除了。 node& t = s[id] = node(cur, 0, 0); //变量名不想打那么长所以引用来偷懒
if(str[k] == '(') //根据括号来拓展
{
k++;
t.l = solve(); k++;
t.r = solve(); k++;
} if(g[t]) { cnt--; return g[t]; } //去掉重复
return g[t] = id;
} void print(int u)
{
if(done[u] == kase) //省去了清零, 秀!
{
printf("%d", u);
return;
} done[u] = kase;
cout << s[u].s; //学习这种输出方式,先输出根节点, 然后递归。
if(s[u].l != 0)
{
putchar('(');
print(s[u].l);
putchar(',');
print(s[u].r);
putchar(')');
}
} int main()
{
int T;
scanf("%d", &T); for(kase = 1; kase <= T; kase++)
{
g.clear();
cin >> str;
k = cnt = 0;
print(solve()); //两个函数一起写
puts("");
} return 0;
}

最新文章

  1. 【C#】给无窗口的进程发送消息
  2. 比Ansible更吊的自动化运维工具,自动化统一安装部署_自动化部署udeploy 1.0
  3. C语言:socket简单模拟http请求
  4. JAVA字符串的相关练习
  5. IPython, Notebook, NumPy, SciPy, matplotlib 和其它
  6. iOS边练边学--GCD的基本使用、GCD各种队列、GCD线程间通信、GCD常用函数、GCD迭代以及GCD队列组
  7. 将linux下的rm命令改造成移动文件至回收站【转】
  8. [CSS]元素的显示与隐藏
  9. web前端工程师必须掌握的localStorage(二)
  10. Django web 开发指南 no such table:
  11. C题
  12. 单元测试利器JUnit4
  13. linux中cat、more、less、tail、head命令
  14. 不直接访问远程的数据库,而是通过中间件(专业DBA的博客)
  15. Android开发之文件下载,状态时显示下载进度,点击自动安装
  16. GhostDoc的使用
  17. sql server多行数据(一列)转换成一个字段
  18. matlab图片清晰度调整
  19. sprintf的用法
  20. oldboy s21day12.设计商城系统,主要提供两个功能:商品管理、会员管理。

热门文章

  1. data is not None
  2. redis 篇 - set
  3. 判断浏览器是PC设备还是移动设备
  4. cogs 2752. [济南集训 2017] 数列运算
  5. 12:打印 1 到最大的 n 位数
  6. POJ3684 Physics Experiment 【物理】
  7. Android学习之GridView图片布局适配经验
  8. Android提高UI性能技巧
  9. web forms page和control的生命周期life cycle交互,以及page生命周期中每个event中需要做什么事情
  10. m_Orchestrate learning system---二、如何实现验证码自动点击刷新