zoukankan      html  css  js  c++  java
  • P1087 [NOIP2004 普及组] FBI 树

    题目传送门

    一、样例解读

    二、C++代码

    #include <bits/stdc++.h>
    
    using namespace std;
    const int N = 1e5 + 10;
    
    int n, m;
    string s; //2^n长度的01串
    
    /**
     * 功能:获取字符串s的类型
     * @param s
     * @return
     */
    char getStype(string s) {
        int c0 = 0, c1 = 0;
        for (int i = 0; i < s.size(); i++) if (s[i] == '1') c1++; else c0++;
        if (c1 == 0)return 'B';
        else if (c0 == 0) return 'I';
        return 'F';
    }
    
    /**
     * 功能:构建FBI树
     * @param start 开始的位置
     * @param end   结束的位置
     */
    void dfs(string s) {
        if (s.length() > 1) {
            //左树
            dfs(s.substr(0, s.length() / 2));//从哪个位置开始,截取多少个
            //右树
            dfs(s.substr(s.length() / 2));//从哪个位置开始,不说截取多少个就是截取到尾
        }
        cout << getStype(s);//后序遍历
    }
    
    
    int main() {
        //这个n是无用的,因为是上古的考题,都是C时代的,要求使用char数组,没有n说不过去,现在都用string了,不需要n了。
        cin >> n >> s;
        //利用递归构建FBI树
        dfs(s);
        return 0;
    }
    
  • 相关阅读:
    团队协议
    C++ 多继承和虚继承的内存布局(转)
    轻量级的.Net ORM框架介绍
    EF下CodeFirst、DBFirst与ModelFirst分析
    JDK方式
    JSON
    事务的ACID特性
    数据库查询
    Assets
    内部文件存储
  • 原文地址:https://www.cnblogs.com/littlehb/p/15101809.html
Copyright © 2011-2022 走看看