• / Vijos FBI树 递归


    描述

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

    FBI树是一种二叉树1,它的结点类型也包括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树,并输出它的后序遍历2序列。

    格式

    输入格式

    输入的第一行是一个整数N(0<=N<=10),第二行是一个长度为2^N的“01”串。

    输出格式

    输出包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。

    样例1

    样例输入1

    3
    10001011
    

    样例输出1

    IBFBBBFIBFIIIFF
    

    限制

    每个测试点1s

    来源

    NOIP2004普及组第三题

     1 /*
     2     小小递归耗我青春 
     3 */
     4 #include<cstdio>
     5 #include<cstring>
     6 #include<iostream>
     7 #define MAXN 1050
     8 
     9 using namespace std;
    10 
    11 int n,len;
    12 
    13 char s[MAXN];
    14 
    15 inline void read(int&x) {
    16     x=0;int f=1; char c=getchar();
    17     while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
    18     while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
    19     x=x*f;
    20 }
    21 
    22 inline char judge(int l,int r) {
    23     bool _f0=false,_f1=false;
    24     if(l==r) {
    25         if(s[l]=='1') return 'I';
    26         else if(s[l]=='0') return 'B';
    27     }
    28     else {
    29         for(int i=l;i<=r;i++) {
    30             if(s[i]=='0') _f0=true;
    31             if(s[i]=='1') _f1=true;
    32         }
    33         if(_f0&&!_f1) return 'B';
    34         else if(!_f0&&_f1) return 'I';
    35         else return 'F';
    36     }
    37 }
    38 
    39 inline void dfs(int left,int right) {
    40     if(left==right) {
    41         cout<<judge(left,right);
    42         return;
    43     }
    44     int mid=(left+right)>>1;
    45     dfs(left,mid);
    46     dfs(mid+1,right);
    47     cout<<judge(left,right);
    48     return;
    49 }
    50 
    51 int main() {
    52     read(n);
    53     scanf("%s",s+1);
    54     len=strlen(s+1);
    55     dfs(1,len);
    56     return 0;
    57 }
    代码


    作者:乌鸦坐飞机
    出处:http://www.cnblogs.com/whistle13326/
    新的风暴已经出现 怎么能够停止不前 穿越时空 竭尽全力 我会来到你身边 微笑面对危险 梦想成真不会遥远 鼓起勇气 坚定向前 奇迹一定会出现

     
  • 相关阅读:
    阅读第十到十二章有感
    程序测试学习之5.2作业
    作业五——封装
    作业4 阅读《构建之法》第6 第7章有感
    汉堡包~~~
    作业3 阅读《构建之法》1-5章
    结对子实验——小学生四则运算
    小学生四则运算程序
    学会提问(转)
    error of “omission” and “commission”
  • 原文地址:https://www.cnblogs.com/whistle13326/p/7127302.html
Copyright © 2020-2023  润新知