这道题看了刘汝佳的代码真的是天秀, 很值得学习. 具体看代码 #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;…
题意:如题,用表达式树来表示一个表达式,且消除公共的部分,即用编号表示.编号 K 定义为表达式第 K 个出现的字符串. 解法:先构造表达式树,给每棵子树用(string,left_son,right_son)-->(哈希值,...,...)编号.由于最多出现4个小写字母,所以可以用27进制数表示,同时也要利用好映射map的count(),和对应的dict[]的编号. 再递归输出表达式,利用编号的定义,看输出编号或字符串. 注意--这里的自定义比较器用的是"显式定义",若是2个键值…