早期部分代码用 Java 实现。由于 PAT 虽然支持各种语言,但只有 C/C++标程来限定时间,许多题目用 Java 读入数据就已经超时,后来转投 C/C++。浏览全部代码:请戳

本文谨代表个人思路,欢迎讨论;)

1021. Deepest Root (25)

题意

无环连通图也可以视为一棵树,选定图中任意一点作为根,如果这时候整个树的深度最大,则称其为 deepest root。
给定一个图,按升序输出所有 deepest root。如果给定的图有多个连通分量,则输出连通分量的数量。

分析

算法实现的步骤如下:

  • 1.使用并查集判断图是否为连通的。
  • 2.任意选取一点,做 dfs 搜索,选取其中一个最远距离的点 A,再做一次 dfs,找到的所有距离最远的点以及点 A 都是 deepest root。

判定图是否连通使用 union-find set 即可。更关键的点在于找到 deepest root。实际上,使用两次 dfs 就可以实现。
证明之前,先介绍两个概念,一个是直径,树的 deepest root 到最远叶子的路径我们暂称直径,而 deepest root 和最远叶子节点则成为端点。
注明关键在于以下两点:

  • 从任意一个点 dfs 得到的最远点都是直径的端点。证明如下:

    任意选一点 A,做 dfs 查找距离 A 最远的点,因为是 dfs,所以肯定会经过某直径上的点 B,从 B 出发最远的点是直径上的端点 C。
    那么,这个端点 C 为何一定是 A 的最远居里点呢?可以反证证明,如果有一个点 D,A->D 不经过直径,且 length(A->D) > length(A->C),
    那么,从 C 所在直径上构造出经过 D 的比原直径更长的直径,得证。

  • 所有的树的直径都交于一点(或者公用段路径上的几点)。
    于是,从 B 点 dfs 出发的所有最长距离的点即为 deepest root。证明如下:

    如果两条直径不相交,而树上任意两点肯定连通,则从两直径上,可以选取两点连通以组成更长的直径;如果三条直径相较于不同的两点,也可以根据相交截断的长度组合出更长的直径。

1022. Digital Library (30)

题意

给定 N (<=10000) 本书的信息,包括 7 位 ID,最多 80 字符的书名,最多 80 字符的作者名,
多个最多 10 字符的关键词,最多 80 字符的出版商和属于 [1000, 3000]的出版时间。
另给出 M (<=1000) 的查询请求,按照查询格式分为:

  • 1: 书名
  • 2: 作者
  • 3: 关键词
  • 4: 出版商
  • 5: 年份

输出查询结果。如果有多个结果,按照书的 ID 的升序排列。

分析

简单模拟题。在使用 Map 结构来构建倒排索引的过程中,可以讨巧的避免根据不同查询类型使用两层 map,
直接通过在 key 中增加查询标记来实现。另外 C++的 priority_queue 支持对常规数据类型的最小堆实现:priority_queue<string, vector<string>, greater<string>>,方便了结果输出。

1023. Have Fun with Numbers (20)

题意

给出一个 20 位的正整数,要求计算其乘以 2 的值,并判定结果的数值是否是原数字所有位数打乱的结果。结果输出 Yes 或 No,以及乘以 2 以后的数字。

分析

判重使用 Hash 思想。过程如下:

  • 1.原数字按字符串读入,并在一个 int hash[10]的 hash 数组中标记每个数值出现的次数,比如如果出现了四次 1,则 hash[1]=4。
  • 2.模拟实现乘以 2 的简单乘法过程,没计算出一位的值,在 hash[]中对应位置上减一。
  • 3.最后通过判定 hash 是否全为 1 和最后结果是否有进位来做判定。

1024. Palindromic Number (25)

题意

非回文数可以通过将它与它的倒转数相加,并不断迭代这一过程获得回文数的结果。比如 67 经过两次处理就得到了 484:
67 + 76 = 143, and 143 + 341 = 484.

给定一个数和迭代的次数,判断能否在迭代次数内获得回文结果。

分析

简单模拟题,处理数字,做逻辑判断。

1025. PAT Ranking (25)

题意

以 PAT 考试为背景,给所有人做排名。给定的数据包括 N(<=100)为赛区的数目,每个赛区的人数以及每个人的分数。
按照总排名、分区号、注册号的优先级排名。

分析

简单模拟题,使用 qsort()排序,注意相同分数的人应该拥有相同的排名。

1026. Table Tennis (30)

题意

乒乓球俱乐部有 K 张乒乓球桌,其中有 M 张是 VIP 桌。有很多人到俱乐部打球,如果桌子都满了,多余的人只能排队等待。

有一个特殊的 VIP 制度:如果有空的 VIP 桌,那么等待队列中的第一对 VIP 会员可以使用这张卓,
如果等待队列中没有 VIP 会员,那么一般会员也可以使用 VIP 桌。当轮到 VIP 上的时候,没有 VIP 桌子,那么 VIP 用户也可以使用一般的桌子。

另外,每张桌服务一对会员的时间最大限制在两个小时。

给定了乒乓球桌的数量 M(编号为 1-M),其中 VIP 卓的数量 K,并指定是那几张桌子。给出来乒乓球俱乐部的 N 对会员的信息,每对会员有一个达到时间,
是否是 VIP 的标记以及打球的时间。要求计算出每对会员的等待时间,以及每张桌服务过的次数。

分析

排队模拟题。有两种思路:

  • 1.主体循环处理人。将乒乓球桌和人都当做资源,乒乓球桌对应记录了 available 的时间,每次取出 available 最早的时间,从等待队列中选
    则最早的会员使用乒乓球桌。其中 vip 处理逻辑为:如果 available 并列最早的桌子中有 vip 桌,则看等待队列中有没有 vip 会员,
    如果有则直接处理他,否则按照正常逻辑处理。每次将某会员安置到一个乒乓球桌上,则可以输出该会员的等待时间的结果信息,并将该乒乓球桌的
    服务人数增加一。
  • 2.主体循环是时间。这样需要模拟同一时刻所有的乒乓球桌以及等待队列,相对比较复杂。

1027. Colors in Mars (20)

题意

给定三个十进制数,要求格式化输出其 13 进制表达。

分析

简单的数字处理和 hash 实现。

1028. List Sorting (25)

题意

模拟 Excel 中按列排序。N (<=100000) 为数据条数,每条数据由三列组成:ID,姓名,成绩。C 可以等于 1,2,3,分别对应到按三列中的哪一列排序。
输出排序结果。

分析

简单排序题。两种思路:

  • 1.简单的直接使用 qsort()实现。
  • 2.自己手写排序算法,比如二叉搜索树实现。

1029. Median (25)

题意

给定两个已排序的整数序列,求出两组数的集合里中间大小的数。

分析

使用归并排序思路实现。

1030. Travel Plan (30)

题意

给定加权图,每条边有两种权值:一是路径长度,二是开销。要求求出给点两点间的最短路径,如果路径长度一样,则要求比较选择开销最小的路径。

分析

使用 Dijkstra 算法的变形,增加一个权重的判定,可以轻松解决。

 原文地址:http://biaobiaoqi.github.com/blog/2013/08/01/pat-1021-1030-solutions/
 版权声明:自由转载-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0

PAT 1021-1030 题解的更多相关文章

  1. PAT甲题题解-1021. Deepest Root (25)-dfs+并查集

    dfs求最大层数并查集求连通个数 #include <iostream> #include <cstdio> #include <algorithm> #inclu ...

  2. PAT甲题题解-1030. Travel Plan (30)-最短路+输出路径

    模板题最短路+输出路径如果最短路不唯一,输出cost最小的 #include <iostream> #include <cstdio> #include <algorit ...

  3. [PAT] 1021 Deepest Root (25)(25 分)

    1021 Deepest Root (25)(25 分)A graph which is connected and acyclic can be considered a tree. The hei ...

  4. PAT Basic 1030

    1030 完美数列 给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列. 现在给定参数p和一些正整数,请你从中选择尽可能多的数 ...

  5. PAT(B) 1030 完美数列 - C语言 - 滑动窗口 & 双指针

    题目链接:1030 完美数列 (25 point(s)) 给定一个正整数数列,和正整数 \(p\),设这个数列中的最大值是 \(M\),最小值是 \(m\),如果 \(M≤mp\),则称这个数列是完美 ...

  6. 2019秋季PAT甲级_C++题解

    2019 秋季 PAT (Advanced Level) C++题解 考试拿到了满分但受考场状态和知识水平所限可能方法不够简洁,此处保留记录,仍需多加学习.备考总结(笔记目录)在这里 7-1 Fore ...

  7. PAT 甲级 1030 Travel Plan (30 分)(dijstra,较简单,但要注意是从0到n-1)

    1030 Travel Plan (30 分)   A traveler's map gives the distances between cities along the highways, to ...

  8. PAT A 1030. Travel Plan (30)【最短路径】

    https://www.patest.cn/contests/pat-a-practise/1030 找最短路,如果有多条找最小消耗的,相当于找两次最短路,可以直接dfs,数据小不会超时. #incl ...

  9. PAT乙级 1030. 完美数列(25)

    1030. 完美数列(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正整数数列,和正整数p,设这 ...

  10. PAT 1021

    1021. Deepest Root (25) A graph which is connected and acyclic can be considered a tree. The height ...

随机推荐

  1. 读文件头数据判断 PE 文件格式和类型

    namespace X.Reflection { using System; using System.IO; public static partial class ReflectionX { pu ...

  2. ExtJs4学习(七)MVC中的Store

    Ext.data.Store是extjs中用来进行数据交换和数据交互的标准中间件,不管是Grid还是ComboBox,都是通过它 实现数据读取.类型转换.排序分页和搜索等操作的. Ext.define ...

  3. JavaFX2 - 文本可复制的Label

    背景介绍 我的公司和我个人一直都使用JavaFX2来编写client应用程序,同一时候也作为Applet在浏览器中执行. 我们的客户以前拿我们的产品和网页对照,然后向我们提过两个需求: (1) 希望界 ...

  4. 【Codeforces Round #435 (Div. 2) B】Mahmoud and Ehab and the bipartiteness

    [链接]h在这里写链接 [题意] 让你在一棵树上,加入尽可能多的边. 使得这棵树依然是一张二分图. [题解] 让每个节点的度数,都变成二分图的对方集合中的点的个数就好. [错的次数] 0 [反思] 在 ...

  5. Snail—UI学习之自己定义标签栏UITabBarController

    这里的背景跟上面的差点儿相同 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkF ...

  6. 32、从零开始写CMOS摄像头驱动

    使用的内核:linux-3.4.2 参考源码:第32课_新内核下的I2C驱动\i2c\1th_i2c_new_device第2课第1.1.7节文档和图片(从0写USB摄像头)\myuvc 设备地址:写 ...

  7. 【JAVA编码专题】总结 分类: B1_JAVA 2015-02-11 15:11 290人阅读 评论(0) 收藏

    第一部分:编码基础 为什么需要编码:用计算机看得懂的语言(二进制数)表示各种各样的字符. 一.基本概念 ASCII.Unicode.big5.GBK等为字符集,它们只定义了这个字符集内有哪些字符,以及 ...

  8. PHP中出现BOM字符\ufeff,PHP去掉诡异的BOM \ufeff

    研究一个PHP项目的时候,今天项目突然打不开了. 前几天还好好的,用Chrome看了下Response的内容,AJAX页面和普通HTML页面内容前面有一个红色的点. 鼠标移上去,提示"\uf ...

  9. javascript的全局变量 分类: C1_HTML/JS/JQUERY 2014-08-07 11:03 562人阅读 评论(0) 收藏

    javascipt是一门面向对象的编程语言.由于存在一些全局属性及全局函数,因此可以认为存在一个全局变量,这些全局属性及全局函数均是其属性或函数. 在js核心中,并没有定义一个具体的全局变量,因此,j ...

  10. crx

    https://www.crx4chrome.com/down/770/crx/ Downloading crx file for Linkclump The Linkclump crx file y ...