当前位置: 首页 > 编程日记 > 正文

Luogu P1087 FBI树

P1087 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题

 1 #include <cstdio>
 2 #include <cmath>
 3 
 4 struct node
 5 {
 6     char c;
 7     node *lc, *rc;    //左孩子右孩子
 8 };
 9 char a[1030];
10 
11 // node * 要传引用哦
12 void fbicreat(int lr, int rr, node *&p)
13 {
14     p = new node;
15     p->c = 'F';    //先设置成F 后面再判断
16 
17     //如果左右位置在一起,则表示此时的结点为叶
18     if(lr == rr)
19     {
20         if(a[lr] == '0')
21             p->c = 'B';
22         else if(a[lr]=='1')
23             p->c = 'I';
24         p->lc = p->rc = NULL;
25         return;
26     }
27     
28     //这里的判断参考了 keyword_ 的做法
29     bool b0, b1;    //标志b0是0是否出现
30     b0 = b1 = 0;    //标志b1是1是否出现
31     for(int i=lr; i<=rr; i++)
32     {
33         if(a[i]=='0') b0 = 1;
34         else if(a[i]=='1') b1 = 1;
35     }
36     if(b0 && !b1)    //相信大家都能看懂
37         p->c = 'B';
38     else if(b1 && !b0)
39         p->c = 'I';
40     
41     //二叉树二分咯
42     fbicreat(lr, (lr+rr)/2, p->lc);    
43     fbicreat((lr+rr)/2+1, rr, p->rc);
44 }
45 
46 
47 
48 void houxu(node *p)
49 {
50     if(p)    //如果是一棵真树
51     {        //后序遍历: 左 右 根
52         houxu(p->lc);
53         houxu(p->rc);
54         printf("%c", p->c);
55     }
56 }
57 
58 
59 int main()
60 {
61     int n;
62     scanf("%d\n", &n);    //这里记得把回车给读取了
63     n = pow(2, n);
64     for(int i=0; i<n; i++)
65         scanf("%c", a+i);
66     
67     node *p;
68     //从数组0位置到n-1位置建立FBI树
69     fbicreat(0, n-1, p);
70     houxu(p);
71     return 0;
72 }

转载于:https://www.cnblogs.com/yBaka/p/7366569.html

相关文章:

小程序 url 对象转字符串编码传参 url 字符串转对象解码接收参数

url 对象转字符串编码传参 let info encodeURI(JSON.stringify(this.data.info));wx.navigateTo({url: /pages/partner_reward/recognition_result/result?info info,}) url 字符串转对象解码接收参数 onLoad(options){let info JSON.parse(decodeURI(options.info));},

入职体检体检错了_我们如何更新入职体验并获得更多用户

入职体检体检错了by William Woodhead威廉伍德黑德(William Woodhead) 我们如何更新入职体验并获得更多用户 (How we updated our onboarding experience and got more users) 我们过去将转化率提高60&#xff05;的方法 (Methods we used to increase conversion by 60%) As …

Java集合框架:EnumMap

EnumMap定义 package java.util;import java.util.Map.Entry; import sun.misc.SharedSecrets; public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V>implements java.io.Serializable, Cloneable{private final Class<K> keyType;p…

javascript eval和JSON之间的联系

eval函数的工作原理 eval函数会评估一个给定的含有JavaScript代码的字符串&#xff0c;并且试图去执行包含在字符串里的表达式或者一系列的合法的JavaScript语句。eval函数将把最后一个表达式或者语句所包含的值或引用作为返回值。 举例说明 eval评估JavaScript表达式var bar …

notification antd 弹窗使用示例

示例代码 import { notification } from antd;notification.error({description: 您的网络发生异常&#xff0c;无法连接服务器,message: 网络异常,});

python如何编写数据库_如何在几分钟内用Python编写一个简单的玩具数据库

python如何编写数据库MySQL, PostgreSQL, Oracle, Redis, and many more, you just name it — databases are a really important piece of technology in the progress of human civilization. Today we can see how valuable data are, and so keeping them safe and stable…

齐博cms 7.0 漏洞分析

** 0x01 原理分析 ** 还是很早之前爆出来的漏洞&#xff0c;现在拿出来学习一下&#xff0c;参考阿里巴巴&#xff1a;https://security.alibaba.com/... 漏洞发生在/inc/common.inc.php页面中。首先看这个函数&#xff1a; 首先使用ini_get来获取php.ini中变量register_global…

J2EE 中的服务器 tomcat6.0 配置

Tomcat6.0 配置 第一步&#xff1a;下载jdk和tomcat&#xff1a;JDK下载 Tomcat下载 最新的jdk为1.6.10&#xff0c;tomcat为6.0&#xff0c;建议jdk1.4以上&#xff0c;tomcat4.0以上 第二步&#xff1a;安装和配置你的jdk和tomcat&#xff1a;执行jdk和tomcat的安装程序…

【Ant Design Pro 四】react 点击事件传参

简单的绑定点击事件传参&#xff1a; 点击事件 function myClick(){console.log(点击)}return (<Button onClick{myClick}>点击</Button>) 点击事件传参 sendGoods(e){console.log(sendGoods,e)}render() {retrun(<Button type"primary" onClick{(e…

初创公司为什么要我_在一家大型初创公司担任副总裁之前,我希望知道什么

初创公司为什么要我by Assaf Elovic通过阿萨夫埃洛维奇 在一家大型初创公司担任副总裁之前&#xff0c;我希望知道什么 (What I wish I knew before becoming a VP at a large startup) When I started my position as VP of R&D at a growing startup, I thought my bigg…

微信小程序自定义轮播图滚动样式 自定义组件轮播图的实现

效果图&#xff1a; 实现代码&#xff1a; wxml <view class"card card_b"><swiper autoplay"{{true}}" interval"4000" duration"500" current"{{swiperCurrent}}" bindchange"swiperChange" class&qu…

好看的dialog,sweet Alert Dialog 导入Android Studio

系统自带的dialog实在是丑到无法忍受。所以找到了一款比較好的第三方dialog。 github 地址例如以下: https://github.com/pedant/sweet-alert-dialog 老规矩&#xff0c;还是先看效果图&#xff01; 以下来介绍导入Android studio的方法 首先将github上的项目clone到本地。然后…

linux系统中删除文件夹

rm -rf 文件夹的名称 rm-r 文件名称转载于:https://www.cnblogs.com/chucklu/p/4890523.html

unity开发入门_Unity游戏开发终极入门指南

unity开发入门Unity is a great tool for prototyping everything from games, to interactive visualisations. In this article, we run through all you need to know to get started using Unity.Unity是一个很好的工具&#xff0c;可用于制作从游戏到交互式可视化等所有内…

uvalive 3218 Find the Border

题意&#xff1a;一条封闭折线将平面分成了若干个区域&#xff0c;按顺序给出折线各点的坐标&#xff0c;要求输出封闭折线的轮廓。 题解&#xff1a;用类似卷包裹的算法&#xff0c;先确定一个一定会被选中的点(x坐标最小&#xff0c;y坐标最小)作为起点&#xff0c;然后把可…

[Mac] mac linux 多线程下载利器 axel

​> 之前做过一些文件下载的统计&#xff0c;发现谷歌浏览器chrome和火狐firefox, 一般都是单线程的下载文件&#xff0c;360浏览器却是多线程的下载。如今切换到了mac上&#xff0c;发现没有360哪个浏览器&#xff0c;就像找个在linux或者mac下能够多线程下载的工具。 linu…

antd 表单提交,文件和表单内容一起提交,表单校验

用很简单的源码实现包含下列 antd 表单相关知识: 1.表单必填校验,规则校验 2.Upload 上传图片,获取上传图片的状态,如上传成功,上传失败,上传进度条,删除上传的文件 3.获取 Input 组件用户输入的值,设置默认值 4.提交表单不刷新页面 5.把上传的图片显示在页面 页面…

代码注释//_您应该停止编写//的五个代码注释,并且//应该开始的一个注释

代码注释//提供来自您最喜欢和最受欢迎的开源项目的示例-React&#xff0c;Angular&#xff0c;PHP&#xff0c;Pandas等&#xff01; (With examples from your favorite and most popular open source projects — React, Angular, PHP, Pandas and more!) 代码质量与注释之间…

eclipse安装maven

maven 下载地址&#xff1a;http://maven.apache.org/download.cgi 1.maven环境配置 将下载的maven解压到某一盘下&#xff0c;进入E:\maven\apache-maven-3.3.9\conf目录&#xff0c;修改setting.xml文件 找到<localRepository>节点&#xff0c;配置本地仓库的地址&…

微信小程序 循迹功能制作

规划地图的路径&#xff0c;实时获取用户当前的定位&#xff0c;进行路线循迹导航功能的开发&#xff1a; 效果图&#xff1a; 实现代码&#xff1a; <map id"map" enable-satellite longitude"{{longitude1}}" latitude"{{latitude1}}" sca…

DOM解析和SAX解析的区别

DOM解析和SAX解析的区别 博客分类&#xff1a; XMLDOM SAX DOM解析和SAX解析的区别 No区 别DOM解析SAX解析1操作将所有文件读取到内存中形成DOM树&#xff0c;如果文件量过大&#xff0c;则无法使用顺序读入所需要的文件内容&#xff0c;不会一次性全部读取&#xff0c;不受文件…

java编写代码用什么_如何学习用Java编写代码:为什么要学习以及从哪里开始

java编写代码用什么by John Selawsky约翰塞劳斯基(John Selawsky) 如何学习用Java编写代码&#xff1a;为什么要学习以及从哪里开始 (How to learn to code in Java: why you should and where to start) Define your career goals and choose a language. This is the most i…

迷宫寻宝(搜索)

迷宫寻宝&#xff08;一&#xff09; 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述一个叫ACM的寻宝者找到了一个藏宝图&#xff0c;它根据藏宝图找到了一个迷宫&#xff0c;这是一个很特别的迷宫&#xff0c;迷宫里有N个编过号的门&…

理解Python的迭代器(转)

原文地址: http://python.jobbole.com/81916/ 另外一篇文章: http://www.cnblogs.com/kaituorensheng/p/3826911.html 什么是迭代 可以直接作用于for循环的对象统称为可迭代对象(Iterable)。 可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator)。 所有的Iterab…

快捷导航动画制作

做了一个仿大众点评的快捷导航动画效果&#xff0c;点击导航内的箭头&#xff0c;导航缩放&#xff0c;点击快捷导航再伸展。 看效果图&#xff1a; 实现代码&#xff1a; <block wx:if"{{!isCustom}}"><view class"home_and_reSource" animati…

instant apps_Android Instant Apps 101:它们是什么以及它们如何工作

instant appsby Tomislav Smrečki通过TomislavSmrečki Android Instant Apps are a cool new way to consume native apps without prior installation. Only parts of the app are downloaded and launched, giving the users a native look and feel in a couple of secon…

数据库分享一: MySQL的Innodb缓存相关优化

无论是对于哪一种数据库来说&#xff0c;缓存技术都是提高数据库性能的关键技术&#xff0c;物理磁盘的访问速度永 远都会与内存的访问速度永远都不是一个数量级的。通过缓存技术无论是在读还是写方面都可以大大提 高数据库整体性能。Innodb_buffer_pool_size 的合理设置Innodb…

用过美德乐吸奶器的宝妈们感觉比国产吸奶器怎么样啊?

药效好不好&#xff0c;看疗效就知道。吸奶器好不好看评价就知道。我们来看看美德乐吸奶器 天猫旗舰店 : http://medela.wang 的宝妈们的评价如可 拔奶神器&#xff0c;绝对好过贝亲&#xff01;最初一次七八十&#xff0c;后来一百多&#xff0c;现在可以翻个倍。结合宝宝吮吸…

小程序地图多个 circles 使用demo

效果图&#xff1a; 代码&#xff1a; var that; const app getApp() const util require("../../utils/util.js") const data require("../../utils/map.js") Page({data: {pageShow: false,scale: 15,obj: {},longitude: 116.34665554470486,latitud…

编写文档_如何通过编写优质文档来使自己的未来快乐

编写文档by Gabriele Cimato加布里埃莱西马托(Gabriele Cimato) 如何通过编写优质文档来使自己的未来快乐 (How to make your future self happy by writing good docs) 或者&#xff0c;在清除旧代码库时如何减少痛苦 (Or how to be less miserable when dusting off an old …