pta 5-1 关于堆的判断 (25分)
2017-03-30 08:39
204 查看
5-1 关于堆的判断 (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
代码:
将一系列给定数字顺序插入一个初始为空的小顶堆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
代码:
#include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <functional> using namespace std; vector<int> v; int Find(int a) {//查找对应元素值的下标 return find(v.begin()+1, v.end(), a)-v.begin(); } int main(int argc, char const *argv[]) { int n, m, a, b; v.push_back(0);//0坐标用掉,这样比较方便 //父亲结点就是i / 2 儿子结点2 * i or 2 * i + 1 char s[100], tmp[4]; scanf("%d %d", &n, &m); for(int i = 0; i < n; ++i) { scanf("%d", &a); v.push_back(a); push_heap(v.begin()+1, v.end(), greater<int>());//对加入的元素构造最小堆 } scanf("%*c"); while(m--) { gets(s); if(s[strlen(s) - 1] == 't') { sscanf(s, "%d", &a);//提取字符串里面的数字 if(v[1] == a) printf("T\n");//如果是根结点 else printf("F\n"); } else if(s[strlen(s) - 1] == 's') { sscanf(s, "%d %*s %d", &a, &b); a = Find(a); b = Find(b); if(a/2 == b/2) printf("T\n");//兄弟结点 else printf("F\n"); } else { sscanf(s, "%d %*s %s %*s %*s %d", &a, tmp, &b); a = Find(a); b = Find(b); if(!strcmp(tmp, "the")) { if(a == b/2) printf("T\n");//a是b的父亲结点 else printf("F\n"); } else { if(a/2 == b) printf("T\n");//a是b的儿子结点 else printf("F\n"); } } } return 0; }
相关文章推荐
- [置顶] PTA L2-012. 关于堆的判断
- 5-12 关于堆的判断 (25分)
- 关于堆的判断 (25分)
- PTA 一 关于堆的判断
- 关于判断一个多边形环视顺时针还是逆时针的算法
- 一个简单的关于权限判断登陆的javaBean文件
- 关于javascript如何判断某个字符是否占用两个字符的讨论
- Student02370236关于【关于用多态取代条件判断】
- 关于判断卡BIN的修正
- [J2EE]使用 EJB 组件你需要了解些什么呢?--是一些关于使用条件的判断标准
- 关于安全风险的判断
- 关于条件判断的高级用法
- 关于边界对齐的判断
- 关于判断sql查询记录集为空的问题
- 关于在javabean判断虚拟路径和获取物理路径
- 关于JAVA判断字符串是否数字
- 关于闰年的判断方法
- 关于Job “initrevertslipmain”中有两个判断的问题(isnew和isnew1)
- 关于CutString截取时字符串不够如何判断的问题
- 关于对字符长度的判断