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 ;
}
 

最新文章

  1. Jenkins_Maven_Git 持续集成及自动化部署 GentOS版
  2. Loadrunner上传与下载文件脚本
  3. 【BZOJ】2212: [Poi2011]Tree Rotations
  4. Android启动activity的4种模式(standard、singleTop、singleTask、singleINstance)
  5. cocos2d-x 的CCObject与autorelease 之深入分析
  6. mysql5.5提示Deprecated: mysql_query(): The mysql extension is deprecated
  7. ZOJ 3702 Fibonacci
  8. perl lwp 获取请求头
  9. 从零开始学C++之构造函数与析构函数(三):深拷贝与浅拷贝、空类
  10. IDEA异常解决: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
  11. LoRaWAN_stack移植笔记(一)--RF硬件相关
  12. UVa 10132 - File Fragmentation
  13. Java解析word,获取文档中图片位置
  14. Java 中的系统时间
  15. 使用LinkedList类生成一个集合对象,循环加入“小样1”,“小样2”,“小样3”,“小样4”,“小样5”……“小样100”。输出这个集合的大小。再使用循环删除这个集合中所有名字为偶数的对象,比如“小样6”,“小样100”,都是偶数名。最后:循环输出集合中所有的对象,看是否删除成功。
  16. python模块--re模块
  17. dml语句和ddl语句 区别
  18. 【RF库XML测试】parse xml
  19. apache+php生产环境错误记录
  20. [经验分享]SecureCRT导出操作日志 + Notepad自定义语言格式高亮日志文件

热门文章

  1. 51Nod 1522 上下序列 —— 区间DP
  2. Permutations II 典型去重
  3. Android 在eclipse中没有出现AVD的解决方法(转载)
  4. php生成唯一订单号的方法
  5. RandomAccessFile使用场景及总结
  6. SpringBoot集成MybatisPlus解决Mapper文件修改后动态刷新的问题
  7. LOJ#557. 「Antileaf&#39;s Round」你这衣服租来的吗(FHQ Treap+珂朵莉树)
  8. python 中 str与bytes的转换
  9. 用SpringMVC实现的上传下载方式二(多文件上传)
  10. 使用JS分页 &lt;span&gt; beta 3.0 完成封装的分页