码迷,mamicode.com
首页 > 其他好文 > 详细

FBI树 题解

时间:2019-02-05 09:13:21      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:就是   mes   thml   preview   char   为什么   bsp   namespace   www.   

洛谷题面

分析:

递归枚举当前01串,返回值分三种:

  • 返回1,表示当前01串为I串,即全部为1
  • 返回0,表示当前01串为B串,即全部为0
  • 返回3,表示当前01串为F串,即全部为3

于是你就问了,为什么F串要返回3而不返回-1或2呢

我们先把递归的格式搞清楚,每次递归的是这个01串的左子树与右子树

左子树与右子树有以下几种返回值:

左 0 1 3

右 0 1 3

  • 00B
  • 12I
  • F0+31+33+30+1

你会发现以上值有一个共同特点:不等于0或2

这就是为什么F串返回3

然后就没什么了,在递归过程中按左-右-根的顺序即可

代码如下

#include<cstring>
#include<iostream>
using namespace std;
char s[(1<<10)+10];
int work(int l,int r)
{
    if(l==r)
    {
        if(s[l]==0) cout<<"B";
        else cout<<"I";
        return s[l]==1;
    }
    int sl,sr,m=(l+r)/2;
    sl=work(l,m);
    sr=work(m+1,r);
    if(sl+sr==0)
    {
        cout<<"B";
        return 0;
    }
    else if(sl+sr==2)
    {
        cout<<"I";
        return 1;
    }
    else
    {
        cout<<"F";  
        return 3;
    }
}

int main()
{
    cin>>s>>s;
    work(0,strlen(s)-1);
    return 0;
}

 

FBI树 题解

标签:就是   mes   thml   preview   char   为什么   bsp   namespace   www.   

原文地址:https://www.cnblogs.com/shengzhe/p/10352452.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!