P1087 FBI树(洛谷题解最佳独创版---栈运算)

0924-NOIP 2004 普及组-FBI树 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为 B 串,全“1”串称为 I 串,既含“0”又含“1”的串则称为 F 串。 FBI 树是一棵二叉树,它的结点类型也包括 F 结点,B 结点和 I 结点三种。由一个长度为 2N 的“01”串 S 可以构造出一棵 FBI 树 T,递归的构造方法如下: (1) T 的根结点为 R,其类型与串 S 的类型相同; (2) 若串 S ... 阅读详情

空降题目:

题目描述

我们可以把由 0 和 1 组成的字符串分为三类:全 0 串称为 B 串,全 1 串称为 I 串,既含 0 又含 1 的串则称为 F 串。

FBI 树是一种二叉树,它的结点类型也包括 F 结点,B 结点和 I 结点三种。由一个长度为 2^N2N 的 01 串 SS 可以构造出一棵 FBI 树 TT,递归的构造方法如下:

  1. TT 的根结点为 RR,其类型与串 SS 的类型相同;
  2. 若串 SS 的长度大于 11,将串 SS 从中间分开,分为等长的左右子串 S_1S1​ 和 S_2S2​;由左子串 S_1S1​ 构造 RR 的左子树 T_1T1​,由右子串 S_2S2​ 构造 RR 的右子树 T_2T2​。

现在给定一个长度为 2^N2N 的 01 串,请用上述构造方法构造出一棵 FBI 树,并输出它的后序遍历序列。

输入格式

第一行是一个整数 N(0 \le N \le 10)N(0≤N≤10),

第二行是一个长度为 2^N2N 的 01 串。

输出格式

一个字符串,即 FBI 树的后序遍历序列。

输入输出样例

输入 #1复制

3
10001011

输出 #1复制

IBFBBBFIBFIIIFF

说明/提示

对于 40\%40% 的数据,N \le 2N≤2;

对于全部的数据,N \le 10N≤10。

noip2004普及组第3题

思路:

我们首先应该知道后序遍历的特点:左右根

所以要用到一个栈

什么是栈不会还有人不知道吧

详见浅谈STL函数库_火龙果殿下的博客-优快云博客

stack<int> q;

然后用递归反复操作;

有三种情况:

1.长度为1:

    1)是B串

    2)是I串

2.长度不为1:

    1)是B串

    2)是I串

3.是F串

先入栈:

string a;//初始输入字符串
if(a.size()==1){
		if(a=="1") q.push('I');
		else q.push('B');
		return;
	}
	bool flag=true;
	for(int i=0;i<a.size();i++){
		if(a[i]=='1')flag=false;
	}
	if(flag){
		q.push('B');
	}
	else{
		flag=true;
	    for(int i=0;i<a.size();i++){
		    if(a[i]=='0')flag=false;
    	}
    	if(flag){
    		q.push('I');
    	}
    	else{
    		q.push('F');
		}
	}

然后将字符串分为左右两部分,进行递归

注意,由于是栈,所以要先搜索右子树,再搜索左子树

string b,c;
	for(int i=0;i<a.size()/2;i++){
		b+=a[i];
	}
	for(int i=a.size()/2;i<a.size();i++){
		c+=a[i];
	}
	postorder(c);
	postorder(b);

最后输出

void print(){
	while(!q.empty()){
		cout<<q.top();
		q.pop();
	}
}

完整代码

#include<bits/stdc++.h>
#include<stack>
using namespace std;
stack<char> q;
void print(){
	while(!q.empty()){
		cout<<q.top();
		q.pop();
	}
}
void postorder(string a){
	if(a.size()==1){
		if(a=="1") q.push('I');
		else q.push('B');
		return;
	}
	bool flag=true;
	for(int i=0;i<a.size();i++){
		if(a[i]=='1')flag=false;
	}
	if(flag){
		q.push('B');
	}
	else{
		flag=true;
	    for(int i=0;i<a.size();i++){
		    if(a[i]=='0')flag=false;
    	}
    	if(flag){
    		q.push('I');
    	}
    	else{
    		q.push('F');
		}
	}
	string b,c;
	for(int i=0;i<a.size()/2;i++){
		b+=a[i];
	}
	for(int i=a.size()/2;i<a.size();i++){
		c+=a[i];
	}
	postorder(c);
	postorder(b);
}
int main(){
	int n;
	string a;
	cin>>n>>a;
	postorder(a);
	print();
	return 0;
}

洛谷——P1573 栈的操作 题解 阅读详情

相关推荐

Windows系统中 Xmanager 6 企业版下载安装激活教程

Xmanager 6 企业版安装激活教程 1.Xmanager 6 下载网址:https://yunpan.360.cn/surl_yrJrWq3GmjN 2. 双击 Xmanager-6.0.0169r 安装 3. 点击运行按钮 4. 点击下一步 5. 选择我接受许可证协议中的条款(A), 点击下一步。 6. 输入用户名:byg,公司名称:microsoft,序...

mry6的博客 9873

18723 FBI树(存储建树思路)

其实每个结点的值都可以直接由左右结点的值直接得出,可以减少一些遍历的时间。

Vitamin_7_的博客 1361

STM32F0实现数字化SPWM纯正弦波逆变器

这个没啥好说的,搭电路的事。其核心思想是两边桥臂分别由两个180度相位差的正弦波与三角载波比较来控制,优点是在开关器件工作频率一样的情况下,输出PWM频率是单极性SPWM的2倍,能够明显减少谐波,因此只需要相对较小的电感和电容滤波器件就可以起到很好的滤波效果,提升了系统的性能,也精简了系统体积,降低了成本。而双极性pwm则是在整个正弦周期内,四只管子都在高频开关状态工作,对角线上的管子一起导通,另一对角线上管子互补导通,实际上只需要一路互补的PWM控制,负载上电压在正电压和负电压之间切换,不出现0v。

forlifefor的专栏 1万+

【洛谷】P1087 FBI树(二叉树)题解

原题链接:https://www.luogu.org/problem/P1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。 FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2^N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下: T的根结点为R,其类型与串S的...

360°顺滑 438

PLC控制气缸与电磁阀:从原理到实战编程详解

在工业自动化领域,很多工程师都能编写PLC程序控制电机启停,但当涉及到气缸和电磁阀的精确控制时,却常常遇到动作不协调、响应延迟甚至设备损坏的问题。这背后的关键不在于PLC编程本身,而在于对气动元件特性和控制逻辑的深入理解。 本文将从实际工程问题出发,深入解析气缸与电磁阀的工作原理、PLC控制逻辑设计、常见故障排查方法,并通过完整的梯形图实例,帮助读者掌握气动系统自动化编程的核心要点。无论你是刚接触PLC的初学者,还是希望提升气动控制技能的工程师,都能从中获得实用的技术指导。 1. 气缸与电磁阀在自动化控制中

weixin_42522374的博客 337

智能体在车联网中的应用:第9天 核心工具链与仿真世界:SUMO交通仿真入门——从安装到构建你的第一个虚拟十字路口

摘要 SUMO是一款开源微观交通仿真工具,为车联网和自动驾驶算法开发提供高效安全的测试环境。文章详细介绍了SUMO的核心概念、安装方法及实战应用。在Ubuntu或Windows系统安装SUMO后,可通过netedit工具构建十字路口路网,包括创建节点、连接边、设置交通信号灯等步骤。随后通过编写.rou.xml文件定义车辆类型、路线和车流,实现动态交通场景模拟。SUMO支持与外部程序交互,能复现真实场景、进行极端测试和算法验证,是车联网研究的理想数字沙盘。

IT深耕十余载,大道之简 1451

【题解】【洛谷P1087】【树形数据结构,递归】—— [NOIP2004 普及组] FBI 树

平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。我们可以把由 0 和 1 组成的字符串分为三类:全 0 串称为 B 串,全 1 串称为 I 串,既含 0 又含 1 的串则称为 F 串。的 01 串,请用上述构造方法构造出一棵 FBI 树,并输出它的后序遍历序列。

Pantheraonca的博客 1477

3D Slicer-最强大的开源医学图像分割工具简要概述

3D Slicer 是一个免费的开源软件平台,用于医学、生物医学和其他 3D 图像的可视化、处理、分割、配准和分析。读/写DICOM图像和多种其他格式;三维图像、多边形网格和体积渲染的交互式可视化;手动编辑和标记图像;使用刚性和非刚性算法融合和共同配准数据;图像自动分割;跟踪图像引导程序的设备。所有的功能模块可在工具栏里找到,提供搜索,下拉选择,左右切换等功能。3D slicer的大概情况就介绍到这里。它的功能非常强大,也没有必要说掌握每个功能的使用。

Tina姐的博客 2万+

洛谷 P1087 [NOIP2004 普及组] FBI 树 讲解+代码

二叉树中序遍历的实现思想是:1.访问当前节点的左子树;3.访问当前节点的右子树。即考察到一个节点后,将其暂存,遍历完左子树后,再输出该节点的值,然后遍历右子树。二叉树后序遍历的实现思想是:1.访问左子树;3.完成该节点的左右子树的访问后,再访问该节点。即考察到一个节点后,将其暂存,遍历完左右子树后,再输出该节点的值。先序遍历的核心思想:1.访问根节点;3.若当前节点无左子树,则访问当前节点的右子树;即考察到一个节点后,即刻输出该节点的值,并继续遍历其左右子树。好了,完成了这个,你就完成了一半任务了。

m0_73782375的博客 568

32位MIPS流水线CPU设计

32位MIPS流水线CPU设计(vivado)

m0_51320209的博客 3200

【机器视觉】基于深度学习的托盘PCB识别与计数(有无、正反)

工业机器视觉是指在制造业和工业环境中使用计算机视觉技术来执行检测、测量、识别和控制任务。它结合了硬件(如相机、镜头、光源)与软件(图像处理算法)来自动完成传统上需要人工视觉的任务,从而提高生产效率、产品质量以及工作安全性。工业机器视觉系统通常具有高精度、高速度和高可靠性,能够适应恶劣的工作环境。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

题解 洛谷P1087 [NOIP2004 普及组] FBI 树

按照题目描述如果只有0输出B,如果只有1输出I(这是大写的i有的像小写的L所以写个提示),如果有1有0输出F。l是左,r是右,当左右不相同时,二分,从左到中间,从中间+1到右边。a2是0的个数,b是1的个数。

iclouding的博客 331

提示词工程在机器翻译质量提升中的应用

Introduction to Prompt Engineering in Machine Translation Quality Improvement Keywords

AI天才研究院 1151

P1087 [NOIP2004 普及组] FBI 树

P1087 [NOIP2004 普及组] FBI 树

青少年趣味编程 266

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

FBI树python最简题解

FBI树的不建树python写法

m0_73146523的博客 818

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

洛谷P1087.FBI树 (题目 + 代码 + 详细注释)

我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。 FBI树是一种二叉树1,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2^N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下: T的根结点为R,其类型与串S的类型相同; 若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。 现在给定一个长度为2^N的“01”串,请用上述构造方法

618

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

洛谷P1087 FBI树 题解

建树 为了满足题目的要求,我们完全可以建一棵用数组实现的完全二叉树。 从题目给的字符串我们容易得出每个叶节点的取值(B\I)。同时如果我们知道了一个结点的两个孩子节点的取值(F\B\I),就可以推导出该父结点的的取值(F\B\I)。很自然地我们决定从下往上建树。 用字符串1000来举例: 后序遍历 后序遍历用数组构建的二叉树的唯一一个比较纠结的点就是如何判断有无左右孩子。我的做法是设置一个size,大于size是即为没有该孩子结点。 代码实现 #include <bits/stdc++.h&gt

Arctic_Clam的博客 469

洛谷 P1087 FBI树

题目链接: 点我跳转 题目大意: 读题吧。。。好像总结不出来 题目分析:既然是后序遍历,那就每次先判断两个子树的类型,如果都是B就输出B,如果都是I,就输出I,否则就输出F,然再把信息反馈给父节点就OK了。 #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;string&gt; #...

ChenyangDu的博客 330

洛谷----P1087 FBI树(简单的递归建树)

旧人旧事更值得怀念,或悲或喜每个人身上都承载着某一段时光,但是我会永远清澈永远疯狂永远浪漫。没有人能回到过去重新活过,但你我都可以从现在开始,决定我们未来的模样。 ---...

0k-ok 519

洛谷P1087 FBI树

文章目录题目思路AC代码后言 题目 添加链接描述 思路 其实这个树很简单,就是一个满二叉树,我们利用父亲结点是i左结点是2* i右节点是2*i+1来存储。就与data信息是字符串所以我利用了一个结构体Node来存储相应信息。存储之后还要对剩余的叶子结点进行处理,就是将叶子结点作为data存入结构体中,便于写递归。 AC代码 #include <bits/stdc++.h> using namespace std; struct Node { string left, right, data;

qq_30747875的博客 183

蓝桥杯|FBI树(Python)我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。FBI树是一种二叉树,它的结点类型也包括F结

5.后序遍历输出二叉树。因此,该题分为三块:输入,递归函数,二叉树后续输出函数。主要理解在递归:将给定2^N长度的字符串,依次中间分割,引入字符串下标,左右子串进行递归调用,最终一个字符不可再分,左右下标相等;此时回溯各个结点的类型,结点位置的关系:父节点p ,左右子节点:2*p ,2*p+1, 将各个结点类型存储在二叉树的数组,即也要引入一个参数p来记录层数表示层与层调用和回溯。递归也分三块:递归到最后一层进行并填入最后一层结点的类型,递归部分,回溯对各个结点的左右结点判断。

Galaxy987的博客 817

[洛谷] 刷题栈 & 队列

并用另一个栈储存需要运算的数字。可以用一个栈储存运算符。

2301_79602614的博客 752

[NOIP2004 普及组] FBI 树

我们可以把由 0 和 1 组成的字符串分为三类:全 0 串称为 B 串,全 1 串称为 I 串,既含 0 又含 1 的串则称为 F 串。FBI 树是一种二叉树,它的结点类型也包括 F 结点,B 结点和 I 结点三种。由一个长度为2N的 01 串S可以构造出一棵 FBI 树TTRSS1SS1​S2​S1​RT1​S2​RT2​现在给定一个长度为2N的 01 串,请用上述构造方法构造出一棵 FBI 树,并输出它的后序遍历序列。

没有标题哈哈哈 455

[题解]ybt1365:FBI树(fbi)

ybt1365:FBI树(fbi) [题目描述] 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。 FBI树是一种二叉树,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下: T的根结点为R,其类型与串S的类型相同; 若串S的长度大于1,...

weixin_30681121的博客 447

用python来解 PAT1087有多少不同的值-20-满分

根据题意:求当自然数n依次取 1、2、3、……、N时,算式⌊n/2⌋+⌊n/3⌋+⌊n/5⌋有多少个不同的值 理清思路,只需要用for循环将每一次的值计算然后放在一起,再输出数据的值的数量就ok,这里可以取巧直接利用集合的去重的特性。 代码很简单: n = int(input()) res = set() for i in range(1,n+1): res.add(i//2 + i//3 + i//5) print(len(res)) ......

pythonuser1的博客 295

算法-蓝桥杯习题(3-2)

  蓝桥杯习题   目录   入门训练(详见 算法-蓝桥杯习题(1-1))Go   基础练习(详见 算法-蓝桥杯习题(2-1))Go 基础练习(详见 算法-蓝桥杯习题(2-2))Go 算法训练(详见 算法-蓝桥杯习题(3-1))Go 算法训练(详见 算法-蓝桥杯习题(3-2))Go 算法训练(详见 算法-蓝桥杯习题(3-3))Go 算法训练(详见 算法-蓝桥杯习题(3-4))...

GFox-鬼狐 2万+
上一篇: 六一特别文章:小盆友快乐抽奖
下一篇: 洛谷P2085最小函数值
火龙果king
博客等级 码龄5年 89粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值