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树的后序遍历序列。
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
bool x[2000];
int y[5000],a,b,c,d,e,f,g,m,n,k,cnt,bnt,dnt,mmp;
char z,z1[20];
int cot(int p)
{
if(y[p]==3)
{
cout<<"F";
}
if(y[p]==2)
{
cout<<"I";
}
if(y[p]==1)
{
cout<<"B";
}
}
int print(int l)
{
if(mmp==g)
{
return 0;
}
if(y[l*2]==0)
{
cot(l);
mmp++;
y[l]=0;
if(l%2==0)
{
print(l+1);
}
else
{
print(l/2);
}
}
else
{
print(l*2);
}
}
int main()
{
cin>>m;
n=1;
k=1;
for(a=1;a<=m;a++)
{
n=n*2;
k=k+n;
}
g=k;
f=n;
for(a=1;a<=n;a++)
{
cin>>z;
if(z=='0')
{
x[a]=0;
}
else
{
x[a]=1;
}
} // for(a=1;a<=n;a++)
// {
// cout<<x[a];
// }
for(a=1;a<=n;a++)
{
if(x[a]==1)
{
cnt=1;
}
else
{
bnt=1;
}
} if(cnt==1&&bnt==1)
{
y[1]=3;
}
else
{
if(cnt==1)
{
for(a=1;a<=k;a++)
{
cout<<"I";
}
return 0;
}
if(bnt==1)
{
for(a=1;a<=k;a++)
{
cout<<"B";
}
return 0;
}
}
cnt=0;
bnt=0;
dnt++; // g=n;
for(a=1;a<=m;a++)
{
n=n/2;
k=f/n;
for(b=1;b<=k;b++)
{
for(c=(b-1)*n+1;c<=n*b;c++)
{
if(x[c]==1)
{
cnt=1;
}
else
{
bnt=1;
}
}
dnt++;
if(cnt==1&&bnt==1)
{
y[dnt]=3;
}
else
{
if(cnt==1)
{
y[dnt]=2;
}
if(bnt==1)
{
y[dnt]=1;
}
}
cnt=0;
bnt=0;
}
} n=f/2;
print(n);
return 0;
// gets(z1);
// for(a=1;a<=g;a++)
// {
// if(y[a]==3)
// {
// cout<<"F";
// }
// if(y[a]==2)
// {
// cout<<"I";
// }
// if(y[a]==1)
// {
// cout<<"B";
// }
// }
// system("pause");
return 0; }
FBI树的更多相关文章
- Vijos 1114 FBI树
描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&quo ...
- 【递归】Vijos P1114 FBI树(NOIP2004普及组第三题)
题目链接: https://vijos.org/p/1114 题目大意: 把01串一分为二,左半边描述当前节点左子树,右半边描述右子树,子树全为1则为I节点,全为0则为B节点,混合则为F节点,直到当前 ...
- 创建FBI树
需求:数串由2^n个'0' '1'数串组成,对于一个数串,有01混合出现,则视为F,全0数串为B,全1数串为I. 将给定数串进行切割,如10010011可以用二叉树表示为 F(10010011) / ...
- 蓝桥杯之FBI树问题
问题描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&q ...
- noip普及组2004 FBI树
FBI树 描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含" ...
- Vijos P1114 FBI树【DFS模拟,二叉树入门】
描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串. FBI树是一种二叉树1,它的结点类型也包括F结点,B结点和I结点三种 ...
- [题解]ybt1365:FBI树(fbi)
ybt1365:FBI树(fbi) [题目描述] 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串. FBI树是一种二叉树,它 ...
- FBI树-数据结构(二叉树)
问题 B: [2004_p4]FBI树-数据结构 时间限制: 1 Sec 内存限制: 125 MB提交: 57 解决: 46 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称 ...
- C语言 · FBI树
算法训练 FBI树 时间限制:1.0s 内存限制:256.0MB 锦囊1 二叉树. 问题描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I ...
- FBI树(第一次做建树题)
试题来源 NOIP2004 普及组 问题描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串. FBI树是一种二叉树,它的结 ...
随机推荐
- C# 判断List集合中是否有重复的项
/*在.Net 3.5 以上*/ ).Count() >= ;
- python发送邮件(带附件)
python通过stmp发送qq邮件,带附件 import smtplib from email.mime.multipart import MIMEMultipart from email.mime ...
- 科学计算基础包——Numpy
一.NumPy简介 NumPy是高性能科学计算和数据分析的基础包.它是pandas等其他各种工具的基础. 1.NumPy的主要功能 (1)ndarray:一个多维数组结构,高效且节省空间. (2)无需 ...
- HDU 5215 Cycle(dfs判环)
题意 题目链接 \(T\)组数据,给出\(n\)个点\(m\)条边的无向图,问是否存在一个奇环/偶环 Sol 奇环比较好判断吧,直接判是否是二分图就行了.. 偶环看起来很显然就是如果dfs到一个和他颜 ...
- 我为什么不用Django而用Flask?
前言 对于初学者来说,找到一个好的框架来学习或者项目开发都是非常有必要的,而当你有一定开发经验后,你应该选择适合当前业务需要的框架.我这里并不想探讨哪个框架好哪个不好,这个永恒的话题就跟探讨“世界上哪 ...
- SharePoint - Templates & Definitions
1. <ListTemplate>元素的SecurityBits属性 Optional Text. Defines the item-level permissions in the li ...
- babel 的一些记录
babel 的作用是将高版本的代码转换成低版本的可支持的代码: 过程是 读取 source code 转换为语法树 -> 经过处理 -> 转换为 code: babel有preset和pl ...
- yjh_study_command
1.show current user in oralce ansower:show user 2.search name of table in current user model. answ ...
- 别跑了,看看脚下有木有money
别跑了,看看脚下有木有money 1.长大论坛 本来是想做个博客的,无奈级别不够,博客过于复杂,所以就做了这个类似于贴吧的东西.在这里,你可以发帖:可以吐槽学校.可以向他人寻求帮助.甚至可以 ...
- 将springboot打包成的jar文件做成windows服务
1.在idea中用maven将程序打成jar,放到运行的目录中. 2.去github上面下载winsw: https://github.com/kohsuke/winsw/releases 3. 将W ...