SDNUOJ 1168.FBI树
Problem - 1168 (sdnu.edu.cn)
1168.FBI树
我真牛逼!算是第一个自主想出来的线段树。
我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。
FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2^N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:
1) T的根结点为R,其类型与串S的类型相同;
2) 若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。
现在给定一个长度为2^N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历序列。
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
string s;int n;
const int N = 2000;
int a[N];
struct Node
{int l, r;char type;
}tr[N << 2];
char jud(int x) {return x == 1 ? 'I' : 'B';
}
void pushup(int u)
{char &now = tr[u].type;char left = tr[u << 1].type, right = tr[u << 1 | 1].type;if(left == right && left == 'I') now = 'I';else if(left == right && left == 'B') now = 'B';else now = 'F';
}
void build(int u, int l, int r)
{if(l == r) {tr[u] = {l, r, jud(a[l])};cout <<tr[u].type;return;}tr[u] = {l, r};int mid = l + r >> 1;build(u << 1, l, mid), build(u << 1 | 1, mid + 1, r);pushup(u);cout << tr[u].type;
}
int main(){//std::ios::sync_with_stdio(false);//std::cin.tie(nullptr);int _pow[11];_pow[0] = 1;for (int i = 1; i <= 11; i ++ ) {_pow[i] = _pow[i - 1] * 2;}cin >> n;cin >> s;for (int i = 0; i < (int)s.size(); i ++ ) {a[i + 1] = s[i] - '0';}build(1, 1, _pow[n]);cout << '\n';// bianli(1, 1, _pow[n]);return 0;
}
/*
3
10001011
*/
SDNUOJ 1168.FBI树相关推荐
- Luogu P1087 FBI树
P1087 FBI树 题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串, ...
- P1087 FBI树
题目描述 我们可以把由"000"和"111"组成的字符串分为三类:全"000"串称为BBB串,全"111"串称为I串,既 ...
- 【vijos】【二叉树】FBI树
描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&quo ...
- 洛谷 1087——FBI树
题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&q ...
- 通过“FBI树”复习二叉树算法(洛谷P1087题题解,Java语言描述)
题目要求 P1087题目链接 分析 所谓的"FBI树",其实就是一种二叉树,最后的结果也无非就是二叉树的后序遍历序列. 所以,考察的知识点就是--二叉树基本算法的灵活运用. 本题关 ...
- FBI树(信息学奥赛一本通-T1365)
[题目描述] 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0 ...
- Java 算法 FBI树
目录标题 题目描述 解题思路 代码 题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1" ...
- FBI树-数据结构(二叉树)
问题 B: [2004_p4]FBI树-数据结构 时间限制: 1 Sec 内存限制: 125 MB 提交: 57 解决: 46 题目描述 我们可以把由"0"和"1&q ...
- [Java] 蓝桥杯ALGO-27 算法训练 FBI树
问题描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&q ...
最新文章
- mytag.class.php,dedetag.class.php文件分析
- 皮一皮:成人世界的潜台词...
- java class扫描接口_JAVA 扫描指定路径下所有的jar包,并保存所有实现固定接口的类型...
- 实现俄罗斯方块遇到的问题及游戏下载
- Smzzl with Greedy Snake 模拟-贪心-阅读理解
- GC和JVM调优实战
- Module build failed (from ./node_modules/babel-loader/lib/index.js) 错误解决
- RUNNOOB python练习题 28 递归 数列
- JAVA中的反射机制和模块化
- 开关电源之防浪涌、防雷电路
- 希尔排序增量怎么确定_Python实现希尔排序(已编程实现)
- pythoncontinue函数_Python continue语句
- kali Linux 没有ip解决办法
- 研磨设计模式笔记之简单工厂模式
- 树莓派 | Debian更改屏幕分辨率 或 解决树莓派使用HDMI-VGA转换器黑屏的方案
- python逆时针画圆_python 逆时针
- 在Linux下如何根据域名自签发OpenSSL证书与常用证书转换
- ArcGIS Pro 关于地震数据可视化制作流程(附练习数据下载)
- ProSpec Persephin小鼠重组体解决方案
- conda failed to create process