洛谷 P1087 FBI树
2017-01-22 09:49
162 查看
题目描述
我们可以把由“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。
noip2004普及组第3题
分析:从下往上求出一棵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树,并输出它的后序遍历序列。
输入输出格式
输入格式:
第一行是一个整数N(0 <= N <= 10),第二行是一个长度为2^N的“01”串。
输出格式:
包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。
输入输出样例
输入样例#1:
3
10001011
输出样例#1:
IBFBBBFIBFIIIFF
说明
对于40%的数据,N <= 2;
对于全部的数据,N <= 10。
noip2004普及组第3题
分析:从下往上求出一棵FBI数,然后后序遍历输出。
代码:
var s:ansistring; n:longint; procedure work(l,r,n:longint); var i,mid:longint; flag:char; begin flag:='.'; for i:=l to r do begin if flag='F' then break; if s[i]='0' then if (flag='.') or (flag='B') then flag:='B' else flag:='F' else if (flag='.') or (flag='I') then flag:='I' else flag:='F'; end; if n=0 then begin write(flag); exit; end; mid:=(l+r) div 2; work(l,mid,n-1); work(mid+1,r,n-1); write(flag); end; begin readln(n); readln(s); work(1,length(s),n); end.
相关文章推荐
- 【树】洛谷 P1087 FBI树
- 洛谷 P1087 FBI树
- 数组模拟二叉树之P1087 FBI树
- 洛谷 P1087 FBI树
- 洛谷 1087 FBI树
- 洛谷 P1087 FBI树
- 洛谷 P1739 表达式括号匹配
- 洛谷P1118 [USACO06FEB]数字三角形Backward Digit Su…
- 洛谷 1996_约瑟夫问题_模拟
- 洛谷P2053 [SCOI2007]修车
- 洛谷 P1064 金明的预算方案
- 洛谷 2763 试题库问题
- 铺地毯-洛谷 1003
- 洛谷 P2597 [ZJOI2012]灾难(拓扑排序+建树+动态LCA+树上前缀和)
- 洛谷 1226_取余运算||快速幂_快速幂
- 洛谷P1726 上白泽慧音
- 洛谷P1007 独木桥
- ●洛谷P3348 [ZJOI2016]大森林
- 洛谷 p2530 化工场装箱员(资源型)
- 洛谷P4016 负载平衡问题(最小费用最大流)