堆排序 GPLT L2-012 关于堆的判断
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805064676261888
分析:这题看起来非常唬人,其实不难。。。。。四个judge基本没啥差,就是输入稍微注意一下,只要知道怎么构造一个堆是非常水的一道题目
堆的话就是二叉树,儿子的值一定不小于父亲的值,左子树是父亲节点的2倍,右子树是父亲节点2倍+1
用的是向上浮动的方法构造,听大牛说“必须注意,因为题目要求按照插入的顺序建立,所以是边插入边调整的,必须用向上调整,每次输入一个数之后就将它向上调整。(两者建立出来的二叉树不同)而不能采用先转换为二叉树的方式再向下调整。”
不过具体原因我也不知道。。。。。
上代码吧
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=<<;
const double pi=acos(-);
const int mod=;
const int maxn=;
const int maxm=;
int a[maxn];int n,m;
void upadjust(int i){
if(i==)return ;
while(i!=){
if(a[i]<a[i/]){
swap(a[i],a[i/]);
i/=;
}else{
break;
}
}
}
void judge1(int x){
if(a[]==x)printf("T\n");
else printf("F\n");
}
void judge2(int x,int y){
int idxa,idxb;
for(int i=;i<=n;i++){
if(a[i]==x)idxa=i;
if(a[i]==y)idxb=i;
}
if(idxa>idxb) swap(idxa,idxb);//保证左边的是a,接下来好判断
if(idxa%==&&idxb-idxa==)printf("T\n");
else printf("F\n");
}
void judge3(int x,int y){
int idxa,idxb;
for(int i=;i<=n;i++){
if(a[i]==x)idxa=i;
if(a[i]==y)idxb=i;
}
if(idxa*==idxb||idxa*==idxb-)printf("T\n");
else printf("F\n");
}
void judge4(int x,int y){
int idxa,idxb;
for(int i=;i<=n;i++){
if(a[i]==x)idxa=i;
if(a[i]==y)idxb=i;
}
if(idxb*==idxa||idxb*==idxa-)printf("T\n");
else printf("F\n");
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
upadjust(i);
}
char c[];
int x,y;
for(int i=;i<m;i++){
scanf("%d%s",&x,c);
if(strcmp(c,"and")==){
scanf("%d%s%s",&y,c,c);
judge2(x,y);
}
else{
scanf("%s",c);
if(strcmp(c,"a")==){
scanf("%s%s%d",c,c,&y);
judge4(x,y);
}
else {
scanf("%s",c);
if(strcmp(c,"root")==){
judge1(x);
}
else{
scanf("%s%d",c,&y);
judge3(x,y);
}
}
}
}
return ;
}
堆排序 GPLT L2-012 关于堆的判断的更多相关文章
- PAT 天梯赛 L2-012. 关于堆的判断 【Heap】【STL】
题目链接 https://www.patest.cn/contests/gplt/L2-012 思路 使用 STL 里面有关 Heap 的函数 std::make_heap将[start, end)范 ...
- L2-012. 关于堆的判断
L2-012. 关于堆的判断 题目链接:https://www.patest.cn/contests/gplt/L2-012 终于ac了,简直要哭.题目还是很简单的,不过很多坑: 1.寻找x下标时,有 ...
- pat 团体天梯赛 L2-012. 关于堆的判断
L2-012. 关于堆的判断 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的小顶堆H[] ...
- codevs 2879 堆的判断
codevs 2879 堆的判断 http://codevs.cn/problem/2879/ 题目描述 Description 堆是一种常用的数据结构.二叉堆是一个特殊的二叉树,他的父亲节点比两个儿 ...
- ->code vs 2879 堆的判断(堆的学习一)
2879 堆的判断 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 堆是一种常用的数据结构.二叉堆是一个特殊的二叉树,他的父 ...
- 堆的判断(codevs 2879)
2879 堆的判断 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 堆是一种常用的数据结构.二叉堆 ...
- L2-012. 关于堆的判断(STL中heap)
L2-012. 关于堆的判断 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: “x is the root”:x是根结点: “x and y ...
- 【小顶堆的插入构造/遍历】PatL2-012. 关于堆的判断
L2-012. 关于堆的判断 时间限制 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: “x is the root”:x是根结点: “x a ...
- 【数组模拟-小顶堆的插入构造/遍历】PAT-L2-012.-关于堆的判断--数组模拟
L2-012. 关于堆的判断 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: “x is the root”:x是根结点: “x and y ar ...
随机推荐
- svn强制commit写log
https://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-howto-minlogmsgsize.html Force users to ent ...
- 简单数论总结1——gcd与lcm
并不重要的前言 最近学习了一些数论知识,但是自己都不懂自己到底学了些什么qwq,在这里把知识一并总结起来. 也不是很难的gcd和lcm 显而易见的结论: 为什么呢? 根据唯一分解定理: a和b都可被分 ...
- (转)Autonomous_Vehicle_Paper_Reading_List
Autonomous_Vehicle_Paper_Reading_List 2018-07-19 10:40:08 Reference:https://github.com/ZRZheng/Auton ...
- (转) Read-through: Wasserstein GAN
Sorta Insightful Reviews Projects Archive Research About In a world where everyone has opinions, on ...
- 【译】第38节---EF6-基于代码的配置
原文:http://www.entityframeworktutorial.net/entityframework6/code-based-configuration.aspx EF6引入了基于代码的 ...
- 基于SVM的python简单实现验证码识别
验证码识别是一个适合入门机器学习的项目,之前用knn 做过一个很简单的,这次用svm来实现.svm直接用了开源的库libsvm.验证码选的比较简单,代码也写得略乱,大家看看就好. 1. 爬取验证码图片 ...
- HDU 1512 Monkey King(左偏树模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=1512 题意: 有n只猴子,每只猴子一开始有个力量值,并且互相不认识,现有每次有两只猴子要决斗,如果认识,就不打了 ...
- 前端面试总结 (转 0C°)
前端面试总结 1.一些开放性题目 1.自我介绍:除了基本个人信息以外,面试官更想听的是你与众不同的地方和你的优势. 2.项目介绍 3.如何看待前端开发? 4.平时是如何学习前端开发的? 5.未来三到五 ...
- 给 layui upload 带每个文件的进度条, .net 后台代码
1.upload.js 扩展 功能利用ajax的xhr属性实现该功能修改过modules中的upload.js文件功能具体实现:在js文件中添加监听函数 //创建监听函数 var xhrOnProgr ...
- sprinf sprintf_s 的用法
函数功能: 将数据格式化输出到字符串 函数原型: int sprintf( char *buffer, const char *format [,argument] ... ) 注意这里的buffer ...