PAT Class A 1147 Heaps (30point(s))

 Compare the topic of water.

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3+3;
int m, n;
int tree[maxn];
int heap;
vector<int> ans;

void read() {
    for (int i = 1; i <= n; ++i) {
        scanf("%d", &tree[i]);
    }
}

// 判断堆的类型
void judge(int p, int c) {
    if ((heap == 1 && tree[p] > tree[c]) || (heap == 2 && tree[p] < tree[c])) {
        heap = -1;
    } else if (heap == 0) {
        heap = tree[p] < tree[c] ? 1 : 2;
    }
}

bool down(int i) {
    if (i > n) return false;

    if (down(2*i)) judge(i, 2*i);
    if (down(2*i+1)) judge(i, 2*i+1);

    ans.push_back(tree[i]); //对输出格式有要求,那我就先把答案存起来
    return true;
}

void solve() {
    heap = 0;
    ans.clear();

    down(1);

    if (heap == 1) {
        printf("Min Heap\n");
    } else if (heap == 2) {
        printf("Max Heap\n");
    } else {
        printf("Not Heap\n");
    }
    for (int i = 0; i < ans.size(); ++i) {
        printf(" %d" + !i, ans[i]);
    }
    printf("\n");
}

int main() {
    scanf("%d%d", &m, &n);
    while (m--) {
        read();
        solve();
    }
    return 0;
}

 

Guess you like

Origin blog.csdn.net/HNUCSEE_LJK/article/details/108236800