1 条题解
-
0
自动搬运
来自洛谷,原作者为

耶梦加得
In the end it doesn't even matter.搬运于
2025-08-24 21:20:46,当前版本为作者最后更新于2019-06-26 23:12:30,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
一个函数也没有的代码来啦!
在输入的过程中,对于第 k*(2^n) 个数, 我们可以直接把它和兄弟节点“合并”之后直接输出直接替换作为父节点

在一条链上(用箭头表示)的元素都用同一个变量存储
替换的具体方法是:当节点本身与兄弟节点不同时, 父亲节点为F
显而易见否则, 两个节点相同,则父节点就是右子节点(即不变)
因为是后序遍历,所以输出两个子节点就可以直接输出父亲啦!
#include<bits/stdc++.h> using namespace std; int fbi[1025], n; int p2[11] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024}; // 打表2的次方 int main() { cin >> n; char t; for(int i = 1; i <= p2[n]; ++i) { cin >> t; fbi[i] = t - '0'; if(fbi[i] == 0)printf("B"); else if(fbi[i] == 1)printf("I"); else printf("F"); for(int k = 1; k < 11; ++k) {//合并过程 if(i % p2[k] == 0){ if(fbi[i] != fbi[i - p2[k - 1]])fbi[i] = 2; if(fbi[i] == 0)printf("B"); else if(fbi[i] == 1)printf("I"); else printf("F"); } } } return 0; }要注意的是合并过程中k的初值千万不能设为0
不然节点1和谁合并呢还有就是不要不小心输入整数类型,而且千万不要用getchar()(看我的提交记录就知道了)
- 1
信息
- ID
- 89
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者