• P1087 FBI树


    题目描述

    我们可以把由“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_1S1S_2S2;由左子串S_1S1构造R的左子树T_1T1,由右子串S_2S2构造RR的右子树T_2T2

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

    输入输出格式

    输入格式:

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

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

    输出格式:

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

    输入输出样例

    输入样例#1: 复制
    3
    10001011
    
    输出样例#1: 复制
    IBFBBBFIBFIIIFF
    

    说明

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

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

    noip2004普及组第3题

    #include<bits/stdc++.h>
    using namespace std;
    string s;
    int n;
    void dfs(int l,int r){
        if(l<r){
            dfs(l,(r+l)/2);
            dfs((r+l+1)/2,r);
        }
        bool flag1=0,flag2=0;
        for(int i=l;i<=r;i++)
          if(s[i]=='0')
            flag1=1;
          else
            flag2=1;
        if(flag1==1&&flag2==1)
          printf("F");
        if(flag1==1&&flag2==0)
          printf("B");
        if(flag1==0&&flag2==1)
          printf("I");
    }
    // 0 1 2 3 4 5 6 7
    int main(){
        cin>>n>>s;
        n=pow(2,n)-1;
        dfs(0,n);
    }
    #include<bits/stdc++.h>
    using namespace std;
    string s;
    char t[3]; 
    int zzb[3][3]=
    {0,2,2,
     2,1,2,
     2,2,2};
    int dfs(int l,int r)
    {
        if(l==r)
        {
            cout<<t[s[l]-'0'];
            if(s[l]=='0')
                return 0;
            else
                return 1;    
        }
        int mid=(l+r)/2;
        int t1=dfs(l,mid);
        int t2=dfs(mid+1,r);
        int t3=zzb[t1][t2];
        cout<<t[t3];
        return t3; 
    }
    int main()
    {
        t[0]='B';
        t[1]='I';
        t[2]='F';
        int n;
        cin>>n;
        cin>>s;
        int l,r;
        l=0;r=s.size()-1;
        dfs(l,r);
        return 0;
    }
  • 相关阅读:
    java 并发性和多线程 -- 读感 (一 线程的基本概念部分)
    [翻译]Spring框架参考文档(V4.3.3)-第二章Spring框架介绍 2.1 2.2 翻译--2.3待继续
    java 内存模型
    控制反转容器& 依赖注入模式 ---读感。
    go json null字段的转换
    分布式数据库----数据同步
    java 多线程--- Thread Runnable Executors
    go runtime.Gosched() 和 time.Sleep() 做协程切换
    sql 里面 join in 的差别,join的用法
    定时器
  • 原文地址:https://www.cnblogs.com/crazily/p/11128884.html
Copyright © 2020-2023  润新知