/ Vijos / 题库 / FBI树 /

题解

157 条题解

  • 0
    @ 2007-08-20 22:14:40

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    首先求出FBI树,在用递归输出后序遍历

  • 0
    @ 2007-08-03 09:29:00

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    分治分治!

  • 0
    @ 2007-07-16 23:12:33

    一开始竟然把pos函数忘记了...

  • 0
    @ 2007-06-03 23:15:28

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    递归………………

  • 0
    @ 2007-04-05 17:24:27

    简单树型题

  • 0
    @ 2007-03-10 22:17:21

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

  • 0
    @ 2006-11-14 09:33:17

    好象不能用ansistring将得出的后缀串存下来,会超时

    还是一边递归一边输出好

  • 0
    @ 2006-10-29 09:47:38

    竞赛时没写出来……

    竞赛后用了二维数组存二叉树罗罗嗦嗦的AC……

    现在才发现程序这么短……

  • 0
    @ 2006-10-29 00:40:55

    swgr大牛的代码够简洁~~!!

    不像我,很罗嗦地用二叉链表建出了整棵树,再来遍历/....

  • 0
    @ 2006-10-02 09:07:18

    用ansistring读入字符串,分别按要求将字符串分成2部分,加入左右子树,(直到s=1)最后对树内字符串稍微转换下输出。OVER

  • 0
    @ 2006-09-28 21:16:12

    编译通过...

    ├ 测试数据 01:答案错误... ├ 标准行输出

     ├ 错误行输出

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案错误... ├ 标准行输出

     ├ 错误行输出

    晕死啦

    ~~~~~ 我发现教室里有星星

  • 0
    @ 2006-09-13 10:15:08

    花了10多分钟 写完

    一交发现忘了处理 N=0

    一改 全对`\

  • 0
    @ 2006-08-26 23:02:43

    这题的n好像可以省略,我没用上……

  • 0
    @ 2006-08-18 20:20:17

    根据题意递归构造就可以了

    构造时先判这个串是FBI的哪一种,然后劈成两半分别构造,回溯时输出这个串的类型

  • 0
    @ 2006-07-23 15:49:01

    啥叫winner tree

  • 0
    @ 2006-07-15 00:19:24

    大家尽情bs我

    我是用winner tree过的= =

  • -1
    @ 2017-05-08 08:01:04
    /*
    一道经典的递归树形结构,运气不错一遍过了,没有犯一些低级的错误
    对于一个2^n的串,用到2^(n+1)的数组,输入数据在(2^n)到(2^(n+1)-1),
    相当于在二叉树结构数组后部输入的
    然后开始递归,注意:
        我们在手算数据的时候,应该会想到从上向下构造树,即一层一层写下去
    但是在写程序的时候,更方便的应该是从下向上建树*
    因为可以看出这个二分结构的树状递归的性质是
    一个结点的值和其左右子结点的值有关,所以从下向上建立肯定更优
    (不然从上向下每次要扫描?ORZ反正很麻烦)
    嗯QAQ就这样吧心好累继续水题了
                                                            Powder
    */
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    
    const int maxn=(1<<11)+1;
    struct node
    {
        char c;
        int lc,rc;
        node(int x=-1,int y=-1):lc(x),rc(y){};
    }tree[maxn];
    int n;
    
    char check(int x,int y)
    {
        if(tree[x].c=='B'&&tree[y].c=='B')
            return 'B';
        if(tree[x].c=='I'&&tree[y].c=='I')
            return 'I';
        return 'F';
    }
    
    void print(int root)
    {
        if(root!=-1)
        {
            print(tree[root].lc);
            print(tree[root].rc);
            cout<<tree[root].c;
        }
    }
    
    int main()
    {
        char ch;
        cin>>n;
        for(int i=(1<<n);i<(1<<(n+1));i++)
        {
            cin>>ch;
            if(ch=='0')
                tree[i].c='B';
            else
                tree[i].c='I';
        }
        int temp=n-1;
        while(temp>=0)
        {
            for(int i=(1<<temp);i<(1<<(temp+1));i++)
            {
                tree[i].lc=2*i;
                tree[i].rc=2*i+1;
                tree[i].c=check(2*i,2*i+1);
            }
            temp--;
        }
        print(1);
        return 0;
    }
         
    

信息

ID
1114
难度
3
分类
数据结构 | 点击显示
标签
递交数
4151
已通过
2216
通过率
53%
被复制
26
上传者