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树相关推荐

  1. Luogu P1087 FBI树

    P1087 FBI树 题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串, ...

  2. P1087 FBI树

    题目描述 我们可以把由"000"和"111"组成的字符串分为三类:全"000"串称为BBB串,全"111"串称为I串,既 ...

  3. 【vijos】【二叉树】FBI树

    描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&quo ...

  4. 洛谷 1087——FBI树

    题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&q ...

  5. 通过“FBI树”复习二叉树算法(洛谷P1087题题解,Java语言描述)

    题目要求 P1087题目链接 分析 所谓的"FBI树",其实就是一种二叉树,最后的结果也无非就是二叉树的后序遍历序列. 所以,考察的知识点就是--二叉树基本算法的灵活运用. 本题关 ...

  6. FBI树(信息学奥赛一本通-T1365)

    [题目描述] 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0 ...

  7. Java 算法 FBI树

    目录标题 题目描述 解题思路 代码 题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1" ...

  8. FBI树-数据结构(二叉树)

    问题 B: [2004_p4]FBI树-数据结构 时间限制: 1 Sec  内存限制: 125 MB 提交: 57  解决: 46 题目描述 我们可以把由"0"和"1&q ...

  9. [Java] 蓝桥杯ALGO-27 算法训练 FBI树

    问题描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&q ...

最新文章

  1. mytag.class.php,dedetag.class.php文件分析
  2. 皮一皮:成人世界的潜台词...
  3. java class扫描接口_JAVA 扫描指定路径下所有的jar包,并保存所有实现固定接口的类型...
  4. 实现俄罗斯方块遇到的问题及游戏下载
  5. Smzzl with Greedy Snake 模拟-贪心-阅读理解
  6. GC和JVM调优实战
  7. Module build failed (from ./node_modules/babel-loader/lib/index.js) 错误解决
  8. RUNNOOB python练习题 28 递归 数列
  9. JAVA中的反射机制和模块化
  10. 开关电源之防浪涌、防雷电路
  11. 希尔排序增量怎么确定_Python实现希尔排序(已编程实现)
  12. pythoncontinue函数_Python continue语句
  13. kali Linux 没有ip解决办法
  14. 研磨设计模式笔记之简单工厂模式
  15. 树莓派 | Debian更改屏幕分辨率 或 解决树莓派使用HDMI-VGA转换器黑屏的方案
  16. python逆时针画圆_python 逆时针
  17. 在Linux下如何根据域名自签发OpenSSL证书与常用证书转换
  18. ArcGIS Pro 关于地震数据可视化制作流程(附练习数据下载)
  19. ProSpec Persephin小鼠重组体解决方案
  20. conda failed to create process

热门文章

  1. 从51网改版看互联网盈利方式
  2. 实验八 一阶常微分方程初值问题Matlab实现
  3. 打开dll文件时模块加载失败,请确保二进制存储在指定的路径中,或者调试它以检查该二进制或相关的.DLL文件是否有问题
  4. 通用mapper——自定义搭配继承Mapper
  5. 金蝶cloud 常用数据库表
  6. 京东数科前端春招面经
  7. JavaScript倒计时算法(计算剩余多少天)实现
  8. 如何申请ATT官方解锁iPhone4
  9. 2021-11-11
  10. C#练习之打印出所有水仙花数