题目描述

我们可以把由“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树,并输出它的后序遍历序列。

输入输出格式

输入格式:
第一行是一个整数N(0 <= N <= 10),第二行是一个长度为2^N的“01”串。

输出格式:
包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。

输入输出样例

输入样例#1:
3
10001011
输出样例#1:
IBFBBBFIBFIIIFF
说明

对于40%的数据,N <= 2;

对于全部的数据,N <= 10


其实,题目大意就是二分出一个区间,找到这个区间所代表的字母(“F”,”B”,”I”)
从题意中中,我们以得知此题用二分答案
递归二分后,在一个循环统计“0”,“1”的个数,最后判断一下就行了


代码如下:

#include <cstdio>
#include <cstring>
using namespace std;
int const Maxn=10000;
int n,a1[Maxn],l;
char a[Maxn];
void work(int l,int r)
{if(l<r){work(l,l+(r-l)/2);work(1+l+(r-l)/2,r);}int tmp,tmp1;tmp=tmp1=0;for(int i=l;i<=r;i++) if(a1[i])tmp1++; else tmp++;if(!tmp) printf("I");else if(!tmp1) printf("B");else printf("F");
}
int main()
{scanf("%d",&n);scanf("%s",&a[1]);l=strlen(&a[1]);for(int i=1;i<=l;i++)a1[i]=a[i]-'0';work(1,l);return 0;
}

转载于:https://www.cnblogs.com/Comfortable/p/8412300.html

洛谷 1087——FBI树相关推荐

  1. 洛谷P1087 FBI树

    文章目录 题目 思路 AC代码 后言 题目 添加链接描述 思路 其实这个树很简单,就是一个满二叉树,我们利用父亲结点是i左结点是2* i右节点是2*i+1来存储.就与data信息是字符串所以我利用了一 ...

  2. 洛谷 P3373 线段树2

    洛谷 P3373 线段树2 mul和pls更新某区间左右子树sum的时候,别忘了回头更新这个区间的sum 只有在传递给子序列之后,父序列的lz标记才能清零.其他时候,lz标记只增不减 #include ...

  3. 洛谷P3373线段树

    洛谷P3373 线段树模板题,主要对懒标的处理要求比较高. 有三种操作: 区间加法 区间乘法 区间求和查询 tips:我们对一个区间进行乘k操作的时候,他之前可能存在加法lazy还没pushdown, ...

  4. 洛谷P3252 [JLOI2012]树

    题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深度为1.路径不 ...

  5. ●洛谷P3688 [ZJOI2017]树状数组

    题链: https://www.luogu.org/problemnew/show/P3688 题解: 二维线段树. 先不看询问时l=1的特殊情况. 对于一个询问(l,r),如果要让错误的程序得到正确 ...

  6. 洛谷——P2590 [ZJOI2008]树的统计(树链剖分模板练手)

    P2590 [ZJOI2008]树的统计 I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问 ...

  7. 洛谷 P2590 [ZJOI2008]树的统计

    P2590 [ZJOI2008]树的统计 题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把 ...

  8. 洛谷P1873 砍树

    题目描述 伐木工人米尔科需要砍倒M米长的木材.这是一个对米尔科来说很容易的工作,因为他有一个漂亮的新伐木机,可以像野火一样砍倒森林.不过,米尔科只被允许砍倒单行树木. 米尔科的伐木机工作过程如下:米尔 ...

  9. 洛谷3384(树链剖分模板题)

    题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: 格式 ...

最新文章

  1. php 操作txt,PHP 从txt文件中读取数据
  2. 抽象工厂模式解析例子
  3. 用户画像:数据指标与表结构设计
  4. 笔记本长时间不用出现一片黑屏
  5. c# 读取机器CPU信息,硬盘信息,网卡信息
  6. cclink 和发那科机器人_FANUC机器人焊枪工具坐标系设定
  7. 上班划水神器:一个可以在控制台玩斗地主的项目!
  8. AutoCad 二次开发(一) 开发环境搭建
  9. 图形学笔记1.直线扫描转换与devC的图形库ege扩展
  10. 神书《笛卡儿几何》读后感
  11. MySQL区分大小写
  12. 论文笔记—RGB-D SLAM in Dynamic Environments Using Static Point Weighting
  13. python duplicated函数_16、pandas的duplicated和drop_duplicaates函数
  14. Numpy学习笔记(七)数学函数
  15. 大脑状态的重构与认知行为之间的映射
  16. 河北外国语学院计算机宿舍,2021年河北外国语学院新生宿舍条件和宿舍环境图片...
  17. [内推] 微软亚洲研究院(上海)热招研究员和开发工程师:人工智能、云和边缘计算、大数据与知识挖掘等...
  18. CouchDB操作手册
  19. python爬取南京市房价_Python的scrapy之爬取链家网房价信息并保存到本地
  20. 智慧城市数字孪生系统深度融合大数据、云计算等技术应用

热门文章

  1. LeetCode 2076. 处理含限制条件的好友请求(并查集)
  2. LeetCode MySQL 1511. Customer Order Frequency
  3. LeetCode 438. 找到字符串中所有字母异位词(滑动窗口)
  4. LeetCode 1360. 日期之间隔几天(闰年判断)
  5. 如何在linux中使用u盘,如何在Linux系统下使用U盘
  6. 7.排序、聚合函数、分组查询
  7. android 修改系统参数设置,2021-05-15 [RK3399][Android7.1] 调试笔记 ---显示参数动态设置接口...
  8. solidworks模板_工程师实用高级操作,Solidworks自定义属性链接到工程图模板
  9. 知识图谱入门知识(三)词性标注
  10. 26岁!年入100万,两周把 Github 项目推向全球榜首,他是怎么做的?