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(甲级)2021年春季考试 7-4 Recycling of Shared Bicycles
PAT(甲级)2021年春季考试 7-1 Arithmetic Progression of Primes