L2-012. 关于堆的判断(STL中heap)
2024-08-30 20:13:49
L2-012. 关于堆的判断
将一系列给定数字顺序插入一个初始为空的小顶堆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
思路:不想自己写堆所以用了STL中heap,然后剩下的就比较暴力了,未满十八岁请在监护人的陪同下观看。
#include<string>
#include<vector>
#include<sstream>
#include<iostream>
#include<functional>
#include<algorithm>
using namespace std;
int main()
{ int n, m; cin >> n >> m;
vector<int>vec; for (int i = ; i < n; i++){
int num; cin >> num;
vec.push_back(num);
push_heap(vec.begin(), vec.end(), greater<int>());
}
getchar();
while (m--){
bool flag = false;
string temp;
stringstream ss;
ss.clear();
getline(cin, temp);
ss << temp; if (temp.find("root") < temp.size()){
int cnt; ss >> cnt;
if (vec[] == cnt)flag = true;
}
else if (temp.find("siblings") < temp.size()){
int a, b; string c;
ss >> a >> c >> b; for (int i = ; i < vec.size(); i++){
if (vec[i] == a){
int bro = i % == ? i + : i - ;
if (vec[bro] == b)flag = true;
break;
}
if (vec[i] == b){
int bro = i % == ? i + : i - ;
if (vec[bro] == a)flag = true;
break;
}
}
}
else if (temp.find("parent") < temp.size()){
int er, ba; string a, b, c, d;
ss >> ba >> a >> b >> c >> d >> er; for (int i = ; i < vec.size(); i++)
if (vec[i] == ba){
if ( * i + < vec.size() && vec[ * i + ] == er){
flag = true; break;
}
if ( * i + < vec.size() && vec[ * i + ] == er){
flag = true; break;
}
}
}
else if (temp.find("child") < temp.size()){
int er, ba; string a, b, c, d;
ss >> er >> a >> b >> c >> d >> ba;
for (int i = ; i < vec.size(); i++)
if (vec[i] == ba){
if ( * i + < vec.size() && vec[ * i + ] == er){
flag = true; break;
}
if ( * i + < vec.size() && vec[ * i + ] == er){
flag = true; break;
}
}
}
if (flag)cout << "T" << endl;
else cout << "F" << endl;
} return ;
}
最新文章
- Jenkins_Maven_Git 持续集成及自动化部署 GentOS版
- Loadrunner上传与下载文件脚本
- 【BZOJ】2212: [Poi2011]Tree Rotations
- Android启动activity的4种模式(standard、singleTop、singleTask、singleINstance)
- cocos2d-x 的CCObject与autorelease 之深入分析
- mysql5.5提示Deprecated: mysql_query(): The mysql extension is deprecated
- ZOJ 3702 Fibonacci
- perl lwp 获取请求头
- 从零开始学C++之构造函数与析构函数(三):深拷贝与浅拷贝、空类
- IDEA异常解决: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
- LoRaWAN_stack移植笔记(一)--RF硬件相关
- UVa 10132 - File Fragmentation
- Java解析word,获取文档中图片位置
- Java 中的系统时间
- 使用LinkedList类生成一个集合对象,循环加入“小样1”,“小样2”,“小样3”,“小样4”,“小样5”……“小样100”。输出这个集合的大小。再使用循环删除这个集合中所有名字为偶数的对象,比如“小样6”,“小样100”,都是偶数名。最后:循环输出集合中所有的对象,看是否删除成功。
- python模块--re模块
- dml语句和ddl语句 区别
- 【RF库XML测试】parse xml
- apache+php生产环境错误记录
- [经验分享]SecureCRT导出操作日志 + Notepad自定义语言格式高亮日志文件
热门文章
- 51Nod 1522 上下序列 —— 区间DP
- Permutations II 典型去重
- Android 在eclipse中没有出现AVD的解决方法(转载)
- php生成唯一订单号的方法
- RandomAccessFile使用场景及总结
- SpringBoot集成MybatisPlus解决Mapper文件修改后动态刷新的问题
- LOJ#557. 「Antileaf&#39;s Round」你这衣服租来的吗(FHQ Treap+珂朵莉树)
- python 中 str与bytes的转换
- 用SpringMVC实现的上传下载方式二(多文件上传)
- 使用JS分页 <;span>; beta 3.0 完成封装的分页