VIJOS 1114 FBI树
描述
我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。
FBI树是一种二叉树1,它的结点类型也包括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树,并输出它的后序遍历2序列。
格式
输入格式
输入的第一行是一个整数N(0<=N<=10),第二行是一个长度为2^N的“01”串。
输出格式
输出包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。
样例1
样例输入1[复制]
3 10001011
样例输出1[复制]
IBFBBBFIBFIIIFF
限制
每个测试点1s
来源
NOIP2004普及组第三题
题解:一道经典的递归建树求解问题。
样例讲解:第一行输入一个n,第二行输入2^n个0,1字符。将输入的字符串进行递归建树,得到以下结构
10001011
1000 1011
10 00 10 11
1 0 0 0 1 0 1 1
得到一颗满二叉树
然后对树进行后序遍历,得到输出结果。
思路:第一行输入的n比较无用。直接以字符串的形式读入第二行,然后求长度即可。然后建立递归函数。并在递归建树的过程中,直接输出答案。
具体代码如下:
#include <cstdio>
#include <cstring>
char a[2500];
void FBI(int i,int j)
{int mid;int I,B;if (i<=j){mid=(i+j)/2;I=0;B=0;if (i!=j){FBI(i,mid);FBI(mid+1,j);}for (int m=i;m<=j;m++)if (a[m]=='0') B++;else I++;if (B>0 && I>0) printf("F");else if (B>0) printf("B");else printf("I");}
}
int main()
{int n;scanf("%d",&n);scanf("%s",a);FBI(0,strlen(a)-1);return 0;
}
VIJOS 1114 FBI树相关推荐
- 【vijos】【二叉树】FBI树
描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&quo ...
- / Vijos FBI树 递归
描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&quo ...
- Luogu P1087 FBI树
P1087 FBI树 题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串, ...
- P1087 FBI树
题目描述 我们可以把由"000"和"111"组成的字符串分为三类:全"000"串称为BBB串,全"111"串称为I串,既 ...
- 洛谷 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 ...
最新文章
- 面向过程的软件设计方法
- 【BZOJ 1927】 [Sdoi2010]星际竞速
- 设备控制接口(ioctl 函数)
- 八、马科维茨投资组合
- php运行汇编,php脚本的执行过程(编译与执行相分离)
- java开发微信公众平台备忘
- 嵌入式Linux入门9:Linux系统使用
- 我看Slashdot
- 论文赏析[ACL18]基于Self-Attentive的成分句法分析
- linux svn 修改回退,玩转SVN-版本回退
- 通过R访问世界银行数据(World Bank Data)分析经济
- cdr 表格自动填充文字_cdr中看似简单的小工具,你真的会用吗?
- IOS开发之——音乐播放器-播放器页面(05)
- 制作一个微商城要多少钱
- 设计用什么笔记本好?三大选择要点
- python 传奇服务端_夜光带你走进python开发 (三十二)传奇语言
- C++primer十万字笔记 第九章 顺序容器
- Windows和ubuntu下一些提升效率的工具知识点以及typora和Obsidian配置
- 使用Nginx和Lua进行图片webp压缩处理
- edge浏览器显示无法访问此页面?(网络正常版)详细解决措施,亲测有用!
热门文章
- [Video and Audio Data Processing] 截取部分PCM16LE单声道音频采样数据
- matlab里H是什么,matlab 中 hObject和handles区别
- php定义常量的关键字,PHP常量
- 高通Android手机软件开发培训
- Linux——匿名管道、命名管道及进程池概念和实现原理
- shell读书笔记8
- 当串口助手发送数据给单片机,单片机原封不动转发给串口助手显示
- 商务电子邮箱那个安全?怎么使用163邮箱最安全?
- 我39岁,年薪300万,刚刚被裁员了...
- HACER:human增强子数据库