zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    01-Django 简介
    函数及函数的嵌套等
    循环及循环嵌套
    运算符
    if, elif, else及if嵌套
    变量及变量计算和引用
    Python的3种执行方式
    Jmeter设置默认中文启动
    Vysor
    python基础学习(二)
  • 原文地址:https://www.cnblogs.com/crazily/p/11128884.html
Copyright © 2011-2022 走看看