Kai’blog

技术博客

【树论】FBI树

原题传送门

思路


讲这道题之前,先讲一个黑科技一般的函数:basic_string::substr(int x,int y)
这是一个string类的成员函数,它返回一个新的string对象,该对象是从调用者的第x个字符开始往后数y个字符所组成的字符串(若x+y>this->length(),则默认截取到最后一位),这个函数可以完美的解决本题中分割字符串的问题~~~

运用递归,若参数字符串长度大于一,则对其前一半和后一半进行递归,然后分析原字符串的类别,返回F/B/I,若等于一,则分析该字符串的类别,放回F/B/I。

Code


#include <iostream>
#include <string>

using namespace std;

char FBI(string s);

int main() 
{
    int n;
    cin >> n;
    string s;
    cin >> s;
    cout << FBI(s);
    return 0;
}

char FBI(string s) 
{
    if (s.length() > 1)
    {
        cout << FBI(s.substr(0, s.length()/2));
        cout << FBI(s.substr(s.length()/2, s.length()/2));
    }
    bool is_1=false,is_0=false;
    for(int i=0;i<s.length();i++)
    {
        if(s[i]=='1')
            is_1=true;
        if(s[i]=='0')
            is_0=true;
    }
    if(is_1==true&&is_0==true)
        return 'F';
    if(is_1==false&&is_0==true)
        return 'B';
    if(is_1==true&&is_0==false)
        return 'I';
}
posted @ 2019-07-23 10:59  Kai02  阅读(150)  评论(0编辑  收藏  举报
Copyright © 2019-2020 拱大垲. All rights reserved.