捞下同学做的加强版评测问题:https://www.luogu.com.cn/discuss/873061
不太形式化题意:类似一个加密程序(加强版加上了一个解密);
输入一棵有 63 个节点的完全二叉树的所有节点(保证第一层有 20 个节点,第二层有 21 个节点,以此类推直到第 6 层有 25 个节点),每个节点有一个编号 i;
加密方式如下:把这棵完全二叉树按后序遍历排序之后,把输入的字符串按 ascii 编码成一个整数列表 N,连续访问列表 N 63 次,Q 表示第 Q 次询问。然后访问第 Q 个遍历后的节点字符,将节点的原编号 +31 转换为 ascii(即为节点字符),将原来的字符转化为节点字符。
输入格式:
第 1 行输入一个整数 T,代表询问组数。
第 2 到 64T+1 行每 64 行输入以下内容:
输出格式:
输出一共 T 行。
每一行输出加密后的字符串。
部分代码(帮改改,完整代码要私信)
struct treeNode{
char pre, post;
}TREE[70];
string operate_string;
vector<char> backed_tree;
void post_order(int x){
.....
// 计算后序遍历
}
string ecr(string o){
char ans[70] = {};
for(int i=0; i<sizeof(o); ++i){
ans[i] = '?';
}
for(int i=0; i<sizeof(o); ++i){
for(int j=0; i<backed_tree.size(); ++j){
char ch = (char)backed_tree[j];
if(o[i] == (char)j+1)
ans[i] = backed_tree[j];
}
}
stringstream res;
for(int i=0; i<sizeof(o); ++i)
res << ans[i];
return sstream.str(res);
}
int main(void){
......
// 输入 转成后序遍历
}
(不对这话好熟悉)