PAT(甲级)2021年春季考试 7-3 Structure of Max-Heap

Posted CSU迦叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT(甲级)2021年春季考试 7-3 Structure of Max-Heap相关的知识,希望对你有一定的参考价值。

考察:建堆,字符串的处理

建堆上,跳了坑,才发现自己之前的方法过于笨拙,详情见两种最大堆建堆方式

字符串处理上,走的弯路更大,但是也因此牢记了两个技巧

1. cin>>str可以用getline(cin,str)取代

2. sscanf和str.c_str练手,可以直接百万军中取上将首级(得到整型)

最后在查找的时候,我用二分查找,可耻啊,居然忘记了二分查找的前提是有序序列。

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<cstring>
#include<iostream>

using namespace std;

const int maxn = 1010;

int n,m;

int heap[maxn];

void createHeap(){
	for(int i=1;i<=n;i++){
		for(int j=i;j>1&&heap[j]>heap[j/2];j/=2){
			swap(heap[j],heap[j/2]);
		}
	}
}

int find(int x){
	for(int i=1;i<=n;i++){
		if(heap[i]==x)return i; 
	}
	return -1;
} 

int main(){
	
	
	scanf("%d %d",&n,&m);
	
	for(int i=1;i<=n;i++){
		scanf("%d",&heap[i]);
	}
	
	createHeap();
	
	getchar();
	
	string s;
	int a,b;
	int p,q;
	for(int i=0;i<m;i++){
		getline(cin,s);
		if(s.find("root")!=string::npos){
			sscanf(s.c_str(),"%d is the root",&a);
			int p = find(a);
			if(p==1)printf("1");
			else printf("0");
		}
		if(s.find("siblings")!=string::npos){
			sscanf(s.c_str(),"%d and %d are siblings",&a,&b);
			int p = find(a);
			int q = find(b);
			if(p/2==q/2)printf("1");
			else printf("0");
		}
		if(s.find("parent")!=string::npos){
			sscanf(s.c_str(),"%d is the parent of %d",&a,&b);
			int p = find(a);
			int q = find(b);
			if(p==q/2)printf("1");
			else printf("0");
		}
		if(s.find("left")!=string::npos){
			sscanf(s.c_str(),"%d is the left child of %d",&a,&b);
			int p = find(a);
			int q = find(b);
			if(p==q*2)printf("1");
			else printf("0");
		}
		if(s.find("right")!=string::npos){
			sscanf(s.c_str(),"%d is the right child of %d",&a,&b);
			int p = find(a);
			int q = find(b);
			if(p==q*2+1)printf("1");
			else printf("0");
		}
	}
	
	return 0;
}

 

以上是关于PAT(甲级)2021年春季考试 7-3 Structure of Max-Heap的主要内容,如果未能解决你的问题,请参考以下文章

PAT(甲级)2019年春季考试题解

PAT(甲级)2021年春季考试 7-4 Recycling of Shared Bicycles

PAT(甲级)2021年春季考试 7-1 Arithmetic Progression of Primes

PAT(甲级)2017年春季考试

PAT(甲级)2019年春季考试 7-2 Anniversary

PAT(甲级)2020年春季考试 7-2 The Judger