1147 Heaps (30 分)难度: 一般 / 知识点: 堆 模拟

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1147 Heaps (30 分)难度: 一般 / 知识点: 堆 模拟 相关的知识,希望对你有一定的参考价值。


https://pintia.cn/problem-sets/994805342720868352/problems/994805342821531648
直接按照堆模拟即可,如果对于每一个根来说,它又是大根堆,又是小根堆,那么就矛盾了。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],n,m;
vector<int>ans;
void dfs(int u)

    if(u*2<=n) dfs(u*2);
    if(u*2+1<=n) dfs(u*2+1);
    ans.push_back(a[u]);

int main(void)

    cin>>m>>n;
    while(m--)
    
        for(int i=1;i<=n;i++) cin>>a[i];
        bool flag1=0,flag2=0;
        for(int i=1;i<=n;i++)
        
            int x=i;
            for(int j=0;j<2;j++)
            
                int y=i*2+j;
                if(x<=n&&y<=n)
                
                    if(a[x]>=a[y]) flag1=true;//说明是大根堆
                    else flag2=true;//小根堆
                
            
        
        if(flag1&&flag2) puts("Not Heap");//即有大,又有小
        else if(flag1) puts("Max Heap");
        else puts("Min Heap");
        ans.clear();
        dfs(1);
        for(int i=0;i<ans.size();i++) 
        
            if(i) cout<<" ";
            cout<<ans[i];
        
        cout<<endl;
    
    return 0;

以上是关于1147 Heaps (30 分)难度: 一般 / 知识点: 堆 模拟 的主要内容,如果未能解决你的问题,请参考以下文章

PAT Advanced 1147 Heaps (30分)

1147 Heaps

PAT甲级——1147 Heaps30

1147. Heaps (30)

PAT 1147 Heaps

1091 Acute Stroke (30 分)难度: 一般 / bfs