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树是一种二叉树,它的结 ...
随机推荐
- 一般处理程序、ASP.NET和MVC的区别
这个问题说起来,我有点惭愧 想当初在大学里学的就是ASP.NET WebForms 在实习期间也是用的WebForms来开发网站,然后就觉得.NET开发网站就是用这个开发模式 现在想想都想笑...实在 ...
- IDEA+Maven+多个SpringBoot子模块(创建多模块整合项目)
https://blog.csdn.net/willjgl/article/details/77773634 https://blog.csdn.net/qqHJQS/article/details/ ...
- vue发布后的一些问题
1.发布后把config/index.js 的productionSourceMap: true,改成productionSourceMap: false webpack成功隐藏
- angular-自定义模块
<!DOCTYPE html><html lang="en" ng-app="app"><head> <script ...
- ezdpl Linux自动化部署实战
最近把ezdpl在生产环境中实施了,再加上这段时间的一些修改,一并介绍一下. 再次申明: ezdpl不是开箱即用的,需要根据自己的应用环境定制.对初学者来说使用起来反倒困难更多.风险更大. 它不是一个 ...
- jquery简介(一)
摘要:简要介绍jquery的起源,以及为什么需要使用jquery. jquery的优点 jquery体量小,加载速度快,其本身具有的功能使JavaScript应用程序开发人员的工作变得分外轻松.其中最 ...
- win7下tomcat5.5无法通过ip和127.0.0.1访问的解决方法
解决办法:找到tomcat5.5目录下的conf\server.xml文件,原文如下: <Connector port="8080" maxHttpHeaderSize=&q ...
- java web的安全约束--表单的验证
例子,表单和JDBCRealm的安全验证 参考了一篇文章http://www.cnblogs.com/dyllove98/archive/2013/07/31/3228698.html 1.要在wab ...
- Browser进程和浏览器内核(Renderer进程)的通信过程
看到这里,首先,应该对浏览器内的进程和线程都有一定理解了,那么接下来,再谈谈浏览器的Browser进程(控制进程)是如何和内核通信的, 这点也理解后,就可以将这部分的知识串联起来,从头到尾有一个完整的 ...
- IE浏览器下 Vue2.x 和 Angular 应用无法打开
报错信息:SCRIPT5022: 引发了异常但未捕获 polyfills.bundle.js (861,36) 原因是es6报错,需要引用 polyfill. Vue项目中,$ npm install ...