7-10 关于堆的判断 (25分)
 

题目:将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:

  • x is the rootx是根结点;
  • x and y are siblingsxy是兄弟结点;
  • x is the parent of yxy的父结点;
  • x is a child of yxy的一个子结点。

代码:

  1. 1 #include<iostream>
  2. 2 #include<algorithm>
  3. 3 #include<cstdio>
  4. 4 #include<cmath>
  5. 5 #include<cstring>
  6. 6 using namespace std;
  7. 7 const int maxx=1e5+2;
  8. 8 //角标之间的关系已经是知道的了 现在需要数根据已知角标和位置的关系进行补充
  9. 9 //数之间的位置关系,找的时候也根据角标进行查找就行
  10. 10 int n;
  11. 11 int a[1500];
  12. 12 int find(int x){
  13. 13 for(int i=1;i<=n;i++){
  14. 14 if(a[i]==x){
  15. 15 return i;
  16. 16 }
  17. 17 }
  18. 18 return -1;
  19. 19 }
  20. 20 int main(){
  21. 21 int m;
  22. 22 scanf("%d %d",&n,&m);
  23. 23 for(int i=1;i<=n;i++){
  24. 24 scanf("%d",&a[i]);
  25. 25 int k=i;
  26. 26 while(k>1&&a[k/2]>a[k]){
  27. 27 swap(a[k/2],a[k]);
  28. 28 k/=2;
  29. 29 }
  30. 30 }
  31. 31 while(m--){
  32. 32 int num1;
  33. 33 scanf("%d",&num1);
  34. 34 string f1;
  35. 35 cin>>f1;
  36. 36 if(f1=="and"){
  37. 37 int num2;
  38. 38 scanf("%d",&num2);
  39. 39 string f2;
  40. 40 getline(cin,f2);
  41. 41 if(find(num1)/2==find(num2)/2){
  42. 42 printf("T\n");
  43. 43 }else{
  44. 44 printf("F\n");
  45. 45 }
  46. 46 }else{
  47. 47 string f2;
  48. 48 cin>>f2;
  49. 49 if(f2=="a"){
  50. 50 string f3;
  51. 51 string f4;
  52. 52 int num2;
  53. 53 cin>>f3;
  54. 54 cin>>f4;
  55. 55 cin>>num2;
  56. 56 if(find(num1)/2==find(num2)){
  57. 57 printf("T\n");
  58. 58 }else{
  59. 59 printf("F\n");
  60. 60 }
  61. 61 }else{
  62. 62 string f3;
  63. 63 cin>>f3;
  64. 64 if(f3=="root"){
  65. 65 if(find(num1)==1){
  66. 66 printf("T\n");
  67. 67 }else{
  68. 68 printf("F\n");
  69. 69 }
  70. 70 }else{
  71. 71 string f4;
  72. 72 cin>>f4;
  73. 73 int num2;
  74. 74 cin>>num2;
  75. 75 if(find(num1)==find(num2)/2){
  76. 76 printf("T\n");
  77. 77 }else{
  78. 78 printf("F\n");
  79. 79 }
  80. 80 }
  81. 81 }
  82. 82 }
  83. 83 }
  84. 84 }

思路:角标之间的关系已经是知道的了 现在需要数根据已知角标和位置的关系进行补充数之间的位置关系,找的时候也根据角标进行查找就行。每个数读入以后跟其所在位置根的数之间进行比较。保证根节点的数字是最小的,小于左右节点的数。

training11.14的更多相关文章

  1. Ubuntu 14.04中Elasticsearch集群配置

    Ubuntu 14.04中Elasticsearch集群配置 前言:本文可用于elasticsearch集群搭建参考.细分为elasticsearch.yml配置和系统配置 达到的目的:各台机器配置成 ...

  2. IIC驱动移植在linux3.14.78上的实现和在linux2.6.29上实现对比(deep dive)

    首先说明下为什么写这篇文章,网上有许多博客也是介绍I2C驱动在linux上移植的实现,但是笔者认为他们相当一部分没有分清所写的驱动时的驱动模型,是基于device tree, 还是基于传统的Platf ...

  3. Angular2 Hello World 之 2.0.0-beta.14

    公司现在采用angualrjs开发一些web应用,采用的是angular1,现在angular2已经差不多了,听说最近rc6已经出来了……其实感觉好慢啊!之前也做过一些anglar2的例子,但是没有记 ...

  4. 14门Linux课程,打通你Linux的任督二脉!

    Linux有很多优点:安全.自主.开源--,也正是这些优点使得很多人都在学Linux. 虽说网上有大把的Linux课程资源,但是对很多小白来说网上的课程资源比较零散并不适合新手学习. 正因为此,总结了 ...

  5. deepsooncms在Ubuntu 14.04上部署教程

    deepsooncms在Ubuntu 14.04上部署教程 一.安装mono1.在命令行运行sudo apt-key adv --keyserver keyserver.ubuntu.com --re ...

  6. ubuntu 14.10 lts 64-bits环境下使用Android Studio

    距离google发布android studio 1.0正式版已经两个月左右了.由于一直习惯使用eclipse+ADT的模式,而且曾在windows下试用一次Android Studio预览版,感觉卡 ...

  7. 在 Ubuntu 14.10 中借用 Windows 的字体

    在前一篇随笔中,我详细讨论了字体的分类及用途,也以 Fedora 20 为例,展示了字体配置的思路和方法.我在配置 Fedora 20 系统字体的时候,采用的是一种釜底抽薪的方法,完全抛开了系统原有的 ...

  8. 转-基于NodeJS的14款Web框架

    基于NodeJS的14款Web框架 2014-10-16 23:28 作者: NodeJSNet 来源: 本站 浏览: 1,399 次阅读 我要评论暂无评论 字号: 大 中 小 摘要: 在几年的时间里 ...

  9. CSharpGL(14)用geometry shader渲染模型的法线(normal)

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(14)用geometry shader渲染模型的法线(normal) +BIT祝威+悄悄在此留下版了个权的信息说: 2016-08-13 ...

随机推荐

  1. 08、元组tuple

    元组(tuple) 是一个有序且不可变的容器,在里面可以存放多个不同类型的元素 元组是在最后多一个逗号,用于表示它是一个元组 tuple = (11,22,'阿斯顿','媚媚',) #后面多加一个逗号 ...

  2. 数字转人民币读法-python3

    """ 2 把一个浮点数分解成证书备份和小数部分 3 """ 4 def divide(num): 5 intnum = int(num) ...

  3. E - Recursive sequence HDU - 5950 (矩阵快速幂)

    题目链接:https://vjudge.net/problem/HDU-5950 思路: 构造矩阵,然后利用矩阵快速幂. 1 #include <bits/stdc++.h> 2 #inc ...

  4. 在SSM框架中如何将图片上传到数据库中

    今天我们来看看SSM中如何将图片转换成二进制,最后传入到自己的数据库中,好了,废话不多说,我们开始今天的学习,我这里用的编辑器是IDEA 1.导入图片上传需要的jar依赖包 1 <depende ...

  5. Vulkan移植GpuImage(二)Harris角点检测与导向滤波

    Harris角点检测 UI还是用的上次扣像的,只有前后置可以用,别的没有效果,只看实现就好. 相应源码 在实现之前,我先重新整理编译glsl的生成工具,如Harris角点检测中间计算过程需要针对rgb ...

  6. Java例题_20 前20项之和!

    1 /*20 [程序 20 求前 20 项之和] 2 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前 20 项之和. 3 程序分析:请抓住分子与分母的变 ...

  7. 计算机体系结构——CH2 指令系统

    CH2 指令系统 右键点击查看图像,查看清晰图像 X-mind CH2 指令系统 数据表示 定义 指计算机硬件能够直接识别,可以被指令系统直接调用的那些数据类型 确定哪些数据类型用哪些数据表示实现,是 ...

  8. python基础(三):元组

    什么是元组 有时候你需要创建一系列不可修改的元素,元组可以满足这种需求.Python将不能修改的值称为不可变的,而不可变的列表被称为元组. 元组的定义和访问 元组使用圆括号来定义,我们已经知道:元组也 ...

  9. Queue API的几种实现详解

    目录 Queue API的几种方法的使用 ArrayBlockingQueue原理及源码解析 ArrayBlockingQueue的成员变量 ArrayBlockingQueue的offer和put方 ...

  10. Linux/Unix 常用的 15 类别名(alias)

    背景 最近在整理 Linux 运维基线,整理记录下常用的 alias 设置. alias alias 命令用于设置指令的别名.用于简化较长的命令. 语法 alias [别名]=[指令名称] 示例:al ...