题目描述

我们可以把由“00”和“11”组成的字符串分为三类:全“00”串称为BB串,全“11”串称为I串,既含“00”又含“11”的串则称为F串。

FBIFBI树是一种二叉树,它的结点类型也包括FF结点,BB结点和I结点三种。由一个长度为2^N2N的“0101”串S可以构造出一棵FBIFBI树TT,递归的构造方法如下:

1) TT的根结点为RR,其类型与串SS的类型相同;

2) 若串SS的长度大于11,将串SS从中间分开,分为等长的左右子串S_1S1​和S_2S2​;由左子串S_1S1​构造R的左子树T_1T1​,由右子串S_2S2​构造RR的右子树T_2T2​。

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

输入输出格式

输入格式:

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

第二行是一个长度为2^N2N的“0101”串。

输出格式:

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

输入输出样例

输入样例#1: 复制

3
10001011
输出样例#1: 复制

IBFBBBFIBFIIIFF

说明

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

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

noip2004普及组第3题

水题

但是代码写的很糟

(L+R)>>1 会陷入死循环

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define LL long long
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
//////////////////////////////////
#define inf 2147483647
#define N 500000+50
char s[<<];
void build(int L,int R)
{
int one=,zero=;
int mid=(L+R)>>;
if(L==R)
{
if(s[L]=='')
printf("I");
else printf("B");return ;
}
build(L,mid);
build(mid+,R);
rep(i,L,R)
{
if(s[i]=='')one++;
else zero++;
}
if(one&&zero)
printf("F");
else if(one&&!zero)
printf("I");
else printf("B");
return ;
}
int main()
{
int n;
RI(n);
RS(s+);
build(,pow(,n));
return ;
}

修改一下即可:

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define LL long long
#define REP(i,N) for(int i=0;i<(N);i++)
#define CLR(A,v) memset(A,v,sizeof A)
//////////////////////////////////
#define inf 2147483647
#define N 500000+50
char s[<<];
void build(int L,int R)
{
int mid=(L+R)>>; if(R>L)
{
build(L,mid);
build(mid+,R);
}
int one=,zero=;
rep(i,L,R)
{
if(s[i]=='')one++;
else zero++;
}
if(one&&zero)
printf("F");
else if(one&&!zero)
printf("I");
else printf("B");
return ;
}
int main()
{
int n;
RI(n);
RS(s+);
build(,pow(,n));
return ;
}

P1087 FBI树 二叉树的更多相关文章

  1. 洛谷P1087 FBI树

    P1087 FBI树题解: 看到这个题,我想到了线段树!(毕竟刚搞完st表...) 当然,题解中有位大佬也用的线段树,但是当时看的时候我看见了9个if,当场去世. 那么这是一个不用暴力的线段树,且简单 ...

  2. 洛谷:P1087 FBI树 P1030 求先序排列 P1305 新二叉树

    至于为啥把这三个题放到一起,大概是因为洛谷的试炼场吧,三道树的水题,首先要理解 先序中序后序遍历方法. fbi树由于数量小,在递归每个区间时,暴力跑一遍区间里的数,看看是否有0和1.至于递归的方法,二 ...

  3. P1087 FBI树

    题目描述 我们可以把由“00”和“11”组成的字符串分为三类:全“00”串称为BB串,全“11”串称为I串,既含“00”又含“11”的串则称为F串. FBIFBI树是一种二叉树,它的结点类型也包括FF ...

  4. P1087 FBI树 [2004普及]

    这是个正常的.很简单的分治,然后我成功地将这个题搞成了一个贼难搞的东西 还是说一下我那个非常麻烦的思路: 1. 建树 2. 后序遍历 然后就在建树的过程中死循环了,然后还一堆毛病 看了一个AC代码,该 ...

  5. 搜索练习题——FBI树

    目录: ·题目描述 ·知识拓展 ·题目分析 ·思路分析 ·代码实现 ·总结 ·题目描述: (洛谷P1087 FBI树) 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称 ...

  6. Vijos P1114 FBI树【DFS模拟,二叉树入门】

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

  7. FBI树-数据结构(二叉树)

    问题 B: [2004_p4]FBI树-数据结构 时间限制: 1 Sec  内存限制: 125 MB提交: 57  解决: 46 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称 ...

  8. Vijos 1114 FBI树

    描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&quo ...

  9. 创建FBI树

    需求:数串由2^n个'0' '1'数串组成,对于一个数串,有01混合出现,则视为F,全0数串为B,全1数串为I. 将给定数串进行切割,如10010011可以用二叉树表示为 F(10010011) / ...

随机推荐

  1. Mysql 一些基本的小东西

    mysql的安装 1.解压目录 2.添加环境变量 系统的环境变量 3.初始化 mysqld --initialize-insecure 4.启动服务端 mysqld 直接启动 这个时候 吼住 5.连接 ...

  2. Laravel 5.2数据库--填充数据

    1.简介 Laravel 包含了一个简单方法来填充数据库——使用填充类和测试数据.所有的填充类都位于database/seeds目录.填充类的类名完全由你自定义,但最好还是遵循一定的规则,比如可读性, ...

  3. npm i 和 npm install 的区别

    实际使用的区别点主要如下(windows下): 1. 用npm i安装的模块无法用npm uninstall删除,用npm uninstall i才卸载掉 2. npm i会帮助检测与当前node版本 ...

  4. Where is NuGet in VS2017 Community?

    问题:在VS2017中找不到NuGet 回答:https://stackoverflow.com/questions/43702484/where-is-nuget-in-vs2017-communi ...

  5. Confluence 6 MySQL 创建数据库和数据库用户

    一旦你成功的安装和配置了 MySQL 数据库服务器,你需要为你的 Confluence 创建数据库和数据库用户: 在 MySQL 中以超级用户运行 'mysql' .默认的用户为 'root' 同时密 ...

  6. 2。创建第一个angular应用,已经开发前的一些配置

    现在我们开始新建一个angular5的脚手架  . 到想要建项目的目录下.比如我的 在  D:\JsProjects 进入cmd或者powershell cd 进入该文件夹下 然后开始新建,ng ne ...

  7. bzoj2973转移矩阵构造法!

    /* 构造单位矩阵(转移矩阵) 给定n*m网格,每个格子独立按照长度不超过6的操作串循环操作 对应的操作有 0-9:拿x个石头到这个格子 nwse:把这个格子的石头推移到相邻格子 d:清空该格石子 开 ...

  8. cf1025c 思维题

    /* bwwwbwwbw wwbwwwbwb 不管从哪里断开翻转.翻转后的串再整体翻转一定是2s的子串 */ #include<bits/stdc++.h> using namespace ...

  9. medir设置

    setting中 MEDIA_URL="/media/"MEDIA_ROOT=os.path.join(BASE_DIR, "app01","medi ...

  10. python进行进制转换

    # 10进制转为2进制 print(bin(10)) # 结果:0b1010 # 2进制转为10进制 print(int("1001", 2)) # 结果:9 # 10进制转为16 ...