• 二叉树—-1(No.9HN省赛小题)


    题目:

    1013: Prototypes analyze

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 6  解决: 4
    [提交][状态][讨论版]

    题目描述

    ALpha Ceiling Manufacturers (ACM) is analyzing the p roperties of its new series of Incredibly
    Collapse-Proof Ceilings (ICPCs). An ICPC consists of n layers of material, each with a different
    value of collapse resistance (measured as a positive integer). The analysis ACM wants to run will
    take the collapse-resistance values of the layers, store them in a binary search tree, and check
    whether the shape of this tree in any way correlates with the quality of the whole construction.
    Because, well, why should it not?
    To be precise, ACM takes the collapse-resistance values for the layers, ordered from the top layer
    to the bottom layer, and inserts them one-by-one into a tree. The rules for inserting a value v are:
    • If the tree is empty, make v the root of the tree.
    • If the tree is not empty, compare v with the root of the tree. If v is smaller, insert v into the left
    subtree of the root, otherwise insert v into the right subtree.
    ACM has a set of ceiling prototypes it wants to analyze by trying to collapse them. It wants to take
    each group of ceiling prototypes that have trees of the same shape and analyze them together.
    For example , assume ACM is considering five ceiling prototypes with three layers each, as
    described by Sample Input 1 and shown in Figure C.1. Notice that the first prototype’s top layer
    has collapseresistance value 2, the middle layer has value 7, and the bottom layer has value 1. The
    second prototype has layers with collapse-resistance values of 3, 1, and 4 – and yet these two
    prototypes induce the same tree shape, so ACM will analyze them together.
    Given a set of prototypes, your task is to determine how many different tree shapes they induce.
     
     
     
     

    输入

    The first line of the input contains one integers T, which is the nember of test cases (1<=T<=8).
    Each test case specifies:
    * Line 1: two integers n (1 ≤ n ≤ 50), which is the number of ceiling prototypes to analyze,
    and k (1  ≤  k ≤  20), which is the number of layers in each of the prototypes.
    *T he next n lines describe the ceiling prototypes. Each of these lines contains k distinct
    integers ( between 1 and 10 6 , inclusive ) , which are the collapse-resistance values of the
    layers in a ceiling prototype, ordered from top to bottom.

    输出

    For each test case generate a single line containing a single integer that is the number of different tree
    shapes.

    样例输入

    1
    5 3
    2 7 1
    1 5 9
    3 1 4
    2 6 5
    9 7 3
    

    样例输出

    4
    大意就是告诉你一种构造二叉树的方法和每颗二叉树所含的元素值,给出若干颗二棵树,判断有几种不同样式的二叉树;
    第一次知道,指针+结构体构造二叉树,所以1A时用的是一维数组耗费了大量的内存;
    代码:

    #include<iostream>
    #include<cstring>
    using namespace std;
    typedef struct node
    {
    node *l,*r;
    int v;
    }*Tree;                      //Tree类型表示node型指针(Tree a==node *a)
    bool pd=true;
    Tree tree[55];

    void build(Tree &p,int v)        //用引用直接改变p的树形形态,不然的话会构造失败
    {
    if(p==NULL) {
    p=new node();
    p->v=v;
    p->l=NULL;
    p->r=NULL;
    }
    else if(v<p->v) build(p->l,v);
    else if(v>p->v) build(p->r,v);
    }
    void judge(Tree a,Tree b)
    {
    if(a==NULL&&b==NULL) return;
    else if(a&&b){
    judge(a->r,b->r);
    judge(a->l,b->l);
    }
    else pd=false; //不相等                       false表示两棵树形状不相同
    }

    int main()
    {
    int t,i,j,n,m,k;
    int a;
    cin>>t;
    while(t--){int ans=0;
    cin>>n>>k;
    for(j=1;j<=n;++j){
    Tree p=NULL;
    for(i=1;i<=k;++i){
    cin>>a;
    build(p,a);
    }
    tree[j]=p;
    }
    for(i=1;i<=n;++i){
    for(j=i+1;j<=n;++j){
    pd=true;                                           //先假设两棵树相等
    judge(tree[i],tree[j]);
    if(pd) break;                                      //pd值不变说明两棵树真的相等,出现重复直接break
    }
    if(!pd) ++ans;                                  //比较到最后pd还是false说明不重复+1
    }
    cout<<ans<<endl;
    }
    return 0;
    }

  • 相关阅读:
    路由懒加载的实现
    vue中的tab栏切换内容变换
    H5页面的高度宽度100%
    vue中的路由的跳转的参数
    xxxx-xx-xx的时间的加减
    sql server 2008 R2 备份还原到sql 2012
    eval方法将字符串转换成json对象
    CSS3 圆角(border-radius)
    [Easyui
    JavaScript slice() 方法
  • 原文地址:https://www.cnblogs.com/zzqc/p/6597982.html
Copyright © 2020-2023  润新知