【CCCC】L2-012 关于堆的判断 (25分),,手写堆,二叉树编号,向上调整
problem
L2-012 关于堆的判断 (25分)
将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:
x is the root:x是根结点;
x and y are siblings:x和y是兄弟结点;
x is the parent of y:x是y的父结点;
x is a child of y:x是y的一个子结点。
输入格式:
每组测试第1行包含2个正整数N(≤ 1000)和M(≤ 20),分别是插入元素的个数、以及需要判断的命题数。下一行给出区间[−10000,10000]内的N个要被插入一个初始为空的小顶堆的整数。之后M行,每行给出一个命题。题目保证命题中的结点键值都是存在的。
输出格式:
对输入的每个命题,如果其为真,则在一行中输出T,否则输出F。
输入样例:
5 4
46 23 26 24 10
24 is the root
26 and 23 are siblings
46 is the parent of 23
23 is a child of 10
输出样例:
F
T
F
T
手写堆
- 给定一个长为n的序列,建立小顶堆。
- 给出m个询问,判断根节点,兄弟节点,父节点,子节点关系。
solution
- 建堆:没写过堆,但是跟线段树一样是完全二叉树,可以用数组存储,子节点编号p<<1,p<<1|1,perfect。
- 题目要求按顺序建堆,所以边插入边向上调整。(不能转为二叉树再向下调整)
- 父子关系当且仅当2n或2n+1时,当x%2==0且x,y相邻时为兄弟
#include<bits/stdc++.h>
using namespace std;
const int maxn = 10010;int n, m;
vector<int>v;
void update(int i){if(i==1)return ;while(i!=1){if(v[i]<v[i/2]){swap(v[i],v[i/2]);i /= 2;}else{break;}}
}void judge1(int x){if(v[1]==x)cout<<"T\n";else cout<<"F\n";
}
void judge2(int x, int y){int px = 0, py = 0;for(int i = 1; i <= n; i++){if(v[i]==x)px = i;if(v[i]==y)py = i;}if(px>py)swap(px,py);if(px%2==0&&py-px==1)cout<<"T\n";//相邻且父节点相同else cout<<"F\n";
}
void judge3(int x, int y){int px = 0, py = 0;for(int i = 1; i <= n; i++){if(v[i]==x)px = i;if(v[i]==y)py = i;}if(px*2==py||px*2+1==py)cout<<"T\n";//父子当且仅当2n或2n+1时else cout<<"F\n";
}
void judge4(int x, int y){int px = 0, py = 0;for(int i = 1; i <= n; i++){if(v[i]==x)px = i;if(v[i]==y)py = i;}swap(px,py);if(px*2==py||px*2+1==py)cout<<"T\n";else cout<<"F\n";
}int main(){cin>>n>>m;v.resize(n+1);for(int i = 1; i <= n; i++){cin>>v[i]; update(i);}for(int i = 1; i <= m; i++){int x,y;string z;cin>>x>>z;if(z=="and"){cin>>y>>z>>z;judge2(x,y);}else{cin>>z;if(z=="a"){cin>>z>>z>>y;judge4(x,y);}else{cin>>z;if(z=="root"){judge1(x);}else{cin>>z>>y;judge3(x,y);}}}}return 0;
}
【CCCC】L2-012 关于堆的判断 (25分),,手写堆,二叉树编号,向上调整相关推荐
- 7-42 关于堆的判断 (25 分)
7-42 关于堆的判断 (25 分) 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: x and y a ...
- 7-1 关于堆的判断 (25 分)
大一下半期数据结构 关于堆的判断 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: x and y are ...
- 【解析】基础实验4-2.5 关于堆的判断 (25 分)
立志用最少的代码做最高效的表达 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: x and y are ...
- 关于堆的判断 (25 分)
题目: 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: x and y are siblings:x和y ...
- L2-012 关于堆的判断 (25 分)
写在前面的废话 今天把追了两个星期的小说看完了-感觉很是感慨啊, 在这里纪念一下: 我欲乘风向北行,雪落轩辕大如席. 我欲借船向东游,绰约仙子迎风立. 我欲踏云千万里,庙堂龙吟奈我何? 昆仑之巅沐日光 ...
- 堆(手写堆包含STL)
文章目录 前言 一.堆的定义 二.堆的分类及性质(STL的用法) 1.堆的分类 2.STL的用法 3.堆的性质 三.手写堆(重点) 1.手写堆的思想 2.函数模块 3.操作模块 四.完整代码 + 注 ...
- 恶补C++:重载手写堆结构体lower_bound()vector构造、析构函数setmappairstack
部分目录 运算符重载 C++ 函数调用运算符 () 重载 我的经历 关于this 关于友元 附:重载函数 C++补充 优先队列 手写堆 手写堆的存储 手写堆的两个基本操作 插入节点的原理 求当前堆的最 ...
- 大根堆与小根堆的理解,如何手写一个堆,以及什么时候用自己手写的堆,什么时候用语言提供堆的api,(二者的区别)
大根堆与小根堆的理解,如何手写一个堆,以及什么时候用自己手写的堆,什么时候用语言提供堆的api,(二者的区别) 定义 Heap是一种数据结构具有以下的特点: 1)完全二叉树: 2)heap中存储的值是 ...
- Duan2baka的手写堆模板!
随手翻到了去年写的手写堆- -手写堆真是太蠢了 Lheap:小根堆 Rheap:大根堆 #include<algorithm> #include<cstring> #inclu ...
最新文章
- 十厂商发起成立软件自律联盟
- mysql select 所有表_怎样用SQL语句查询一个数据库中的所有表
- android http get
- UVA----10082 WERTYU【字符串】
- RCF - C ++的进程间通信
- python - 2 8 16进制/颜色/字符编码
- 我眼中未来的人机交互
- 【雷达通信】基于matlab Omiga-K算法SAR回波生成和成像【含Matlab源码 1184期】
- javascript代码混淆的原理
- 科来网络分析器11下载地址
- 滴答乐园一直显示连接服务器,滴答乐园iOS版-滴答乐园快手互粉2020苹果iOS版预约 v1.0-优盘手机站...
- Python运行报错most recent call last
- 错误-The server encountered an unexpected condition that prevented it from fulfilling the request
- 各种数据库中的时间日期类型
- 联想拯救者y7000电池耗电快_联想拯救者Y7000游戏本测评之温度、续航双测评
- 寒武纪加速平台(MLU200系列) 摸鱼指南(三)--- 模型移植-分割网络实例
- 认识机器学习与深度学习
- RTD2785T RTD2785R 2K eDP屏驱动芯片介绍
- UE4 材质笔记之墙面(纹理混合+顶点颜色应用)
- Microsoftware Project 的安装和使用不需要连接project server
热门文章
- 用决策树模型求解回归问题(regression tree)
- windows 路径
- Tricks(二十二) —— zip(python) 的实现及使用
- sklearn 细节 —— LinearRegression、Ridge
- python自学行吗-上万程序员总结:自学Python,掌握到什么程度就可以找工作了?...
- 手机上有没有学python的软件-如何优雅的在手机上进行Python编程
- 笔记本电脑下载python视频-如何用Python在笔记本电脑上分析100GB数据(下)
- python教程视频哪个好-Python视频教程谁的好
- python画简便的图-如何用python画M集(1)——M集原始图的画法
- 自学python顺序-python数据结构学习之实现线性表的顺序