5-12 关于堆的判断 (25分)
2017-03-24 14:29
302 查看
将一系列给定数字顺序插入一个初始为空的小顶堆
每组测试第1行包含2个正整数
10000][−10000,10000]内的
对输入的每个命题,如果其为真,则在一行中输出
F
T
F
T
没有手写过堆 不会写...也可以用STL的heap来实现, 还是heap实现起来方便多了。
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(\le≤ 1000)和
M(\le≤ 20),分别是插入元素的个数、以及需要判断的命题数。下一行给出区间[-10000,
10000][−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
输出样例:
FT
F
T
没有手写过堆 不会写...也可以用STL的heap来实现, 还是heap实现起来方便多了。
#include<bits/stdc++.h> using namespace std; vector<int>heap; int n, m; int find(int a) { return distance(heap.begin(), find(heap.begin(), heap.end(), a)); //找a到顶的距离,也就是他的对应下标 } int main(void ) { scanf("%d%d", &n, &m); while(n--) { int t; scanf("%d", &t); heap.push_back(t); make_heap(heap.begin(), heap.end(), greater<int>()); //小顶堆 } getchar(); while(m--) { string q; getline(cin, q); if(q[q.length() - 1] == 't') { int a; stringstream ss(q); ss >> a; if (heap[0] == a) printf("T\n"); else printf("F\n"); } else if(q[q.length() - 1] == 's') { int a, b; string temp; stringstream ss(q); ss >> a >> temp >> b; int pos_a = find(a); int pos_b = find(b); //根是0,所以要加1 pos_a++; pos_b++; if(pos_a / 2 == pos_b / 2) // /2是找父亲,如果父亲相同就是兄弟 printf("T\n"); else printf("F\n"); } else { stringstream ss(q); int a, b; string temp; ss >> a >> temp >> temp; if(temp[0] == 't') { ss >> temp >> temp >> b; int pos_a = find(a); int pos_b = find(b); if(pos_b == pos_a * 2 + 1 || pos_b == pos_a * 2 + 2) printf("T\n"); else printf("F\n"); } else if(temp[0] == 'a') { ss >> temp >> temp >> b; int pos_a = find(a); int pos_b = find(b); if(pos_a == pos_b * 2 + 1 || pos_a == pos_b * 2 + 2) printf("T\n"); else printf("F\n"); } } } return 0; }
相关文章推荐
- pta 5-1 关于堆的判断 (25分)
- 关于堆的判断 (25分)
- 关于大端与小端的判断
- 12-4-19关于c++动态的概念 | 返回引用的情况
- 关于rangeOfString判断是否存在字符串bug
- 关于判断某一个整型值内的1的个数
- 关于 mysql中非null判断
- 关于JS判断图片是否加载完成且获取图片宽度的方法
- 关于EL标签中 no empty 疑惑加入判断一个list是否为空时 用 ${not empty list}个 ${... ne null} 有什么区别了 关于EL标签中 no empty 疑惑
- 关于JS判断图片是否加载完成且获取图片宽度的方法
- linux sh 脚本有关于文件判断操作符,与if配合实现逻辑控制
- 补12.关于mysql的多表查询
- 关于 Java 数组的 12 个最佳方法
- 关于 Java 数组的 12 个最佳方法
- 关于获取QTableWidget item文本和判断item是否为空
- 关于Jsp页面在ww:iterator 标签里面判断的写法是可以直接写数组里面的变量的
- 关于如何判断jQuery中对象是否存在的问题
- js中关于数据类型的判断
- 关于echarts的地图的渲染,根据一个值去判断地图上的点是否该报警!
- java.se.io.12.关于标准输出输入流