![](https://img-blog.csdnimg.cn/20190123185427882.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
PAT甲级部分练习题题解
甲级题库目前共155题,我刷了有120多个题,写成题解的只有一部分,都放在这里了,需要的随时取用。
Apollo-yyy
考研失败的华子5G工程师一枚
展开
-
1138 Postorder Traversal
题目大意:给出二叉树前序遍历和中序遍历,要求输出后序遍历第一个数。解题思路:用前序和中序构建二叉树时递归返回的第一个节点就是后序遍历的第一个数。代码如下:#include<iostream> using namespace std;int in[50010],pre[50010],n;struct node{ int data; node* lchild; n...原创 2019-02-22 11:29:17 · 259 阅读 · 0 评论 -
1137 Final Grading
题目大意:每个学生有四个成绩,线上成绩,期中,期末,总分。现在分别给出这四门成绩下对应的学生分数情况。要求按照总分从大到小(分数相同则按照ID字典序升序)输出总分及格(>=60分)的学生成绩情况。线上成绩必须不小于200分。解题思路:用MAP给每名学生分配唯一的编号方便用结构体保存信息并排序,输入时对于线上成绩小于200的学生不保存。代码如下:#include<iostre...原创 2019-02-22 10:11:24 · 367 阅读 · 0 评论 -
1136 A Delayed Palindrome
题目大意:判断一个字符串是否是回文串,不是就和它的倒置字符串相加,直到结果是回文串为止。如果这样的操作进行十次后还不是回文串,那么就输出“Not found in 10 iterations.”。解题思路:用字符串模拟大整数相加即可。代码如下:#include<iostream>#include<cstdio>#include<cstring>...原创 2019-02-22 09:53:58 · 187 阅读 · 0 评论 -
1147 Heaps
题目大意:判断一个完全二叉树是最大堆还是最小堆还是不是堆,然后输出后序遍历的结果。解题思路:根据最大最小堆的定义一次判断父节点和子节点的关系并记录,如果记录出现冲突说明不是一个堆,否则就输出记录的结果,最后输出后序遍历。代码如下:#include&lt;iostream&gt;#include&lt;cstdio&gt;#include&lt;fstream&gt;#inclu原创 2019-02-20 11:02:00 · 267 阅读 · 0 评论 -
1144 The Missing Number
题目大意;给n个数字,找到不在这个数字列表里面的最小的正整数.解题思路:这题做法很多,我这里为了熟悉一下STl用了SET去重加vector排序,也可以直接用数组标记然后遍历就可以。代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<set>#includ...原创 2019-02-20 10:38:38 · 226 阅读 · 0 评论 -
1146 Topological Order
题目大意:给出一个有向无环图(DAG),然后给出K个拓扑排序序列,判断哪些序列不是拓扑序列,不是拓扑排序的序列将编号输出。解题思路:拓扑排序的思想是将每个入度为0的节点所有的出边顶点的入度都减1,直到减为0就将该点加入拓扑序列中。按照这个思想反过来验证给出的序列的正确性,如果当前点的入度为0,就松弛所有出边点的入度,否则就不是拓扑序列。代码如下:#include<iostream...原创 2019-02-20 10:31:05 · 321 阅读 · 0 评论 -
1021 Deepest Root
题目大意:给出n个节点与N-1条边,问:它们能否形成一棵N个节点的树?如果能,则从中选出节点作为树根,使得整棵树的高度最大。输出所有满足要求的可以作为树根的节点,解题思路:DFS深搜即可,走过的点都标记上,如果一轮搜索下来还有点没有访问过,证明它不是一棵树。代码如下:#include<iostream>#include<cstdio>#include<...原创 2019-02-19 10:50:40 · 244 阅读 · 0 评论 -
1076 Forwards on Weibo
题目大意:在微博中,每个用户都可能被其他若干用户关注。每当该用户发布一条信息时,他的关注者就可以看到这条信息并选择是否转发它,且转发的信息也可以被转发者的关注者再次转发,但同一用户最多只转发该信息一次(信息的最初发布者不能转发该信息)。现在给出N个用户的关注情况(即他们各自关注了那些用户)以及一个转发层数上限L,并给出最初发送消息的因户编号,求在转发层数上限内消息最多会被多少用户转发——摘自《...原创 2019-02-19 10:31:04 · 210 阅读 · 0 评论 -
1098 Insertion or Heap Sort
题目大意:给你初始序列和一段经过部分排序后的序列,问是经过了堆排序还是插入排序,输出排序方式并输出该排序下的下一步的输出序列。解题思路:模拟堆和插入排序的步骤即可,插入用sort更方便一些。每次完成一步后和目标序列进行比较,相同就再进行一步然后返回输出即可。代码如下:#include<iostream>#include<cstdio>#include<...原创 2019-02-15 21:51:44 · 194 阅读 · 0 评论 -
1107 Social Clusters
题目大意:n个人,每个人都有k个兴趣,后面是兴趣种类的编号。有相同兴趣的两个人放到一个组里,两两组之间的人没有任何相同的兴趣,要求输出兴趣组数并按照非递增顺序输出兴趣小组的人数。解题思路:并查集的模板题,通过判断两个兴趣集合是否有交集判断这两个人是否属于同一组,开一个数组记录每棵树下的节点数量,在合并子节点时修改对应树的节点数量。代码如下:#include&lt;iostream&gt...原创 2019-02-14 22:07:22 · 357 阅读 · 0 评论 -
1099 Build A Binary Search Tree
题目大意:输入一棵二叉查找树和n个数据,把这n个数据放入这颗树中,输出层次遍历序列。解题思路:按照二叉查找树中序遍历的特点(数据从小到大)得到二叉树的中序编号序列并把数据排序后对应插入到节点相应的下标,然后BFS输出层次遍历序列结果。代码如下:#include<iostream>#include<cstdio>#include<fstream>...原创 2019-02-14 17:09:31 · 376 阅读 · 0 评论 -
1064 Complete Binary Search Tree
题目大意:给你n个数,这n个数可以唯一的构成一个完全二叉查找树,输出这个树的层次遍历序列。解题思路:完全二叉树的节点下标是有对应关系的,假如根节点下标为x,那么左儿子下标就是2x,右儿子就是2x+1。根据这个关系和题目中限制的结点数n可以构建一棵,根编号为1(当然0也可以)节点数为n的完全二叉树,然后得到这个二叉树的中序遍历编号序列。由于二叉查找树的中序遍历序列永远是一个从小到大的递增序列...原创 2019-02-14 17:01:59 · 169 阅读 · 0 评论 -
1043 Is It a Binary Search Tree
题目大意:给出二叉查找树的节点输入序列,判断这个序列是否为二叉查找树或者镜像(交换左右子节点位置)二叉查找树的先序序列,如果是,输出后序遍历序列。解题思路:按照题目要求构建二叉查找树然后先序遍历得到结果对比即可,为了方便比较两个序列采用vector方便一些,关于镜像二叉查找树只需要写遍历的时候将左右反过来即可。代码如下:#include<iostream>#include...原创 2019-02-14 16:52:17 · 170 阅读 · 0 评论 -
1106 Lowest Price in Supply Chain
题目大意:给出一棵销售供应的树,树根唯一。在树根处货物的价格为P,然后从根节点开始每往子节点走一层,该层货物价格将会在父亲节点的价格上增加r%。找出总价格最便宜的供应链并统计这样的链有多少条。解题思路:DFS,代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<s...原创 2019-02-13 22:05:55 · 183 阅读 · 0 评论 -
1079 Total Sales of Supply Chain
题目大意:给出一棵销售供应的树,树根唯一。在树根处货物的价格为P,然后从根节点开始每往子节点走一层,该层货物价格将会在父亲节点的价格上增加r%。给出每个叶节点的货物量,求他们的价格之和。解题思路:DFS搜索即可,太简单了,实在不知道该啰嗦啥。代码如下:#include<iostream>#include<cstdio>#include<fstream&...原创 2019-02-13 22:00:37 · 414 阅读 · 0 评论 -
1094 The Largest Generation
题目大意:给出一个族谱,找出人数最多的一代,输出这代人的人数和代数编号。老祖宗代数编号为1,。解题思路:BFS遍历树赋值代数编号即可,当然DFS也可以,但是为了方便统计每一代人的人数还是用层次遍历更直观一些。代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<s...原创 2019-02-13 18:44:48 · 211 阅读 · 0 评论 -
1090 Highest Price in Supply Chain
题目大意:给出树节点的数量,货物价格P,转手一次提高的比率r(就是从父节点到子节点,价格要在原来的基础上上涨r%),然后依次给出n的父节点编号,每个节点编号是第i个节点的父节点,如果是-1说明当前节点是树的总根节点。解题思路:很简单的DFS遍历树,递归计算当前节点价格就好,递归边界是当前节点是叶子节点,然后更新最大价格和供应链数量即可。代码如下:#include&lt;iostream...原创 2019-02-13 18:40:00 · 239 阅读 · 0 评论 -
1053 Path of Equal Weight
题目大意:给一棵结点数为n,非叶结点数为m的树,然后给一个权值s。接下来给出n个结点的权值(顺序就是结点ID编号),依次给出m个父节点的子节点编号,要求按照从大到小的顺序(按字典序理解)输出路径权值和为s的路径结点。解题思路:这个题用DFS或者记忆化DP都可以写,这里给出DFS的方法,用一个vectot保存路径,关于输出字典序有个小技巧,就是在给父节点输入子节点的时候,可以按照权值大小排序...原创 2019-02-13 10:56:04 · 167 阅读 · 0 评论 -
1102 Invert a Binary Tree
题目大意:n个节点,依次给出每个节点的左右孩子节点下标,如果没有孩子用‘-’代替,要求从右到左输出层次遍历序列,然后输出翻转二叉树后的中序遍历。解题思路:使用静态链表构建二叉树,标记每一个孩子节点从而找出总的根节点,然后BFS输出层次遍历。中序遍历可以提前交换节点并保存在节点结构体中,正常输出中序遍历即可。代码如下:#include<iostream>#include&l...原创 2019-02-12 17:42:13 · 253 阅读 · 0 评论 -
1086 Tree Traversals Again
题目大意:用栈的输出表示二叉树的中序遍历,要求输出二叉树的后序遍历序列。解题思路:题目隐含了入栈的顺序就是先序遍历的序列,根据这个构建出二叉树然后后序输出即可。代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<set>#include<cmath...原创 2019-02-12 16:55:12 · 422 阅读 · 0 评论 -
1020 Tree Traversals
题目大意:给你二叉树结点数和后序,中序遍历结果,要求输出层次遍历的结果。解题思路:二叉树板子题,根据后序中序构建二叉树,然后通过BFS遍历输出层次序列即可。代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<set>#include<cmath&g...原创 2019-02-12 16:51:01 · 257 阅读 · 0 评论 -
1068 Find More Coins
题目大意:EVa有一些面值的硬币,现在要求支付具体数额的硬币,要求输出需要支付的硬币序列,如果存在多个解就输出字典序最小的,这里的字典序就按照字符串比较时的字典序就可以。解题思路:01背包问题。这里将朴素的背包中的重量和价值合并处理。难点在于记录路径和字典序问题,可以开一个和DP数组维度相同含义的二维数组来记录选择的硬币,由于存在多个解并且要求输出字典序最小,首先将输入的数组从大到小排序,...原创 2019-02-11 10:33:21 · 323 阅读 · 0 评论 -
1097 Deduplication on a Linked List
题目大意:给你一个链表。只保留第一个出现的且节点键值的绝对值不重复的节点(比如15——(-15)只保留15,-15删除),被删除的节点依次构建一个新链表。最后输出删除后得到的链表和被删除节点组成的新链表。解题思路:想了一种投机取巧的方法,就是用动态数组保存节点,被删除的节点放在一个新的数组中,这样无需构建链表和操作指针,非常容易理解。代码如下:#include<iostream&...原创 2019-02-09 17:17:30 · 300 阅读 · 1 评论 -
1040 Longest Symmetric String
题目大意:输出一个字符串中最长回文串的长度。解题思路:一开始暴力写了一发,枚举起点然后扩展字符串判断是否是回文串,但这种方法本质上不包含长度为偶数的回文串,虽然各种骚操作弄了半天但是还是有一个两分的测试点过不去。无奈只好用DP写,DP数组为DP【i】【j】,含义为从i到j的字符串是否为回文串。状态转移方程为DP【i】【j】=(DP【i+1】【j-1】,条件s【i】==s【j】。否则不是回文...原创 2019-02-09 17:06:04 · 402 阅读 · 0 评论 -
1007 Maximum Subsequence Sum
题目大意:最大子序列和,经典DP板子题,DP数组表示以I为结尾的最大和,状态转移方程为 DP[i]=max(DP[i-1]+data[i],data[i])。注意如果都是负数输出-1.代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<set>#includ...原创 2019-02-09 11:17:34 · 129 阅读 · 0 评论 -
1056 Mice and Rice
题目大意:Np只老鼠,每Ng只分为一组选出体重最大的进入下一轮,最后不够Ng也组成一组。直到选出第一名。输出每只老鼠的排名。解题思路:老鼠分组指令可以用队列保存,我用了两个队列互相转换。一开始死活没想出来排名怎么得到,后来一看排名是分组数+1。emmm,还是没想明白为什么啊。。。代码如下:#include<iostream>#include<cstdio>#...原创 2019-02-08 23:09:37 · 212 阅读 · 0 评论 -
1074 Reversing Linked List
题目大意:给你一个链表,每隔k个节点翻转一下,输出翻转后的结果。解题思路:如果链表的长度正好是K的整数倍则全部要分段翻转,否则末尾的余数部分无需翻转。重点是翻转部分首尾指针的修改,可以定义一个变量保存未翻转前尾指针的下一个节点地址,每间隔K个节点修改首指针的指向地址。其他节点就反向修改即可。代码如下:#include<iostream>#include<cstdio...原创 2019-02-08 11:33:04 · 249 阅读 · 0 评论 -
1052 Linked List Sorting
题目大意:给输入的列表进行排序。解题思路:一开始直接就拿结构体排序做了,一边写一边怀疑题目和链表有啥关系,然后有两个测试点过不去。之后意识到可能输入的节点有的不在给定头指针开始的链表上,于是开了一个结构体保存筛选过后的节点,继续结构体排序。注意有可能一个有效节点也没有,那么就只输出“0 -1”。代码如下:#include<iostream>#include<cstd...原创 2019-02-07 21:29:48 · 176 阅读 · 0 评论 -
1032 Sharing
题目大意:两个链表如果存在公共后缀,输出公共后缀的首字母的地址,否则输出-1。解题思路:用结构图保存链表节点,根据输入的链表节点首先跑一遍第一个链表,把跑过的节点都标记掉。然后跑一下第二个链表,如果遇到被标记的节点证明来到了公共后缀的首字母。代码如下:#include&amp;lt;iostream&amp;gt;#include&amp;lt;cstdio&amp;gt;#include&amp原创 2019-02-01 22:23:32 · 136 阅读 · 0 评论 -
1051 Pop Sequence
题目大意:给一个栈的最大容量M,然后给出K个长度为N的出栈序列,入栈的顺序是从1—N,问这些出栈序列是否符合出栈规则。解题思路:模拟栈的入栈出栈即可,每次比较栈顶元素和序列当前元素,相同则出栈且指针指向序列的下一个元素。要注意栈的容量有限制,如果当前栈内元素超过了这个容量也是不符合规则的。代码如下:#include&lt;iostream&gt;#include&lt;cstdio&...原创 2019-02-01 11:25:12 · 276 阅读 · 0 评论 -
1022 Digital Library
题目大意:给出N本书的信息,包括ID,书名,作者,关键词,出版社,出版年份,接下来进行M次查询,查询也对应分为5种(没有ID)。 要求升序输出每次查询结果的ID,如果不存在输出"Not Found"。解题思路:对应书的五种信息分别构造5个MAP来保存当前信息下对应的书ID,由于同一个信息下可能有好几本书(比如一个作者名下有好几本书),所以VALUE取一个集合SET来保存,输入过程中插入到对...原创 2019-01-31 15:55:48 · 171 阅读 · 0 评论 -
1071 Speech Patterns
题目大意:找出一段文本中出现次数最多的单词和出现次数,如果有次数相同的则输出字典序最小的。所谓单词是指字母或者字母和数字的组合。字母不区分大小写。解题思路:map标记单词模拟即可。代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<set>#includ...原创 2019-01-30 16:25:30 · 205 阅读 · 2 评论 -
1100 Mars Numbers
题目大意:如果给的是地球数字就要翻译成火星数字,否则翻译成地球数字,火星数字是13进制数。解题思路:由于给定数字范围为0-169,不包括169,也就是13*13-1( jou dec),所以对于火星翻译成地球可以直接截取字符串长度来截取对应的字符串然后翻译。需要注意的是13的倍数是一种特殊情况,只占一位数而没有后面的0(tret)。代码如下:#include<iostream&g...原创 2019-01-30 15:32:15 · 209 阅读 · 0 评论 -
1054 The Dominant Color
题目大意:找出现次数超过总数一半的那个数。解题思路:方法很多,我这里直接用MAP标记模拟了。代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<set>#include<cmath>#include<cstring>#incl...原创 2019-01-30 15:21:54 · 297 阅读 · 0 评论 -
1039 Course List for Student
题目大意:N名学生和K门课程,分别给出每门课程下选课学生的名字,查询每名学生选了多少门课程以及课程的编号,课程的编号要按照升序输出。解题思路:这个题难点在于如何用唯一的数字标记学生的名字。也就是设计哈希函数。如果用MAP来分配学生名字的标号的话最后一个样例过不去,不是段错误就是什么运行错误。。。由于每名学生的名字由3个大写字母和1个数字组成,可以设计一个简单的哈希函数,如果是字母的话按照2...原创 2019-01-29 10:18:35 · 387 阅读 · 0 评论 -
1047 Student List for Course
题目大意:与1039的要求正相反,给你每名学生的选课情况,要求分别输出每门课程选课人数以及选课学生的名字,名字要按照字典序排序。解题思路:比1039容易多了,由于每个人的名字唯一且顺序输入,分别用1-N标记即可。值得注意的是由于输入输出量大,只能用SCANF输入,那么就只能用二维字符数组保存学生的名字,则第一个维度的下标唯一指向一个学生。代码如下:#include<iostrea...原创 2019-01-29 10:42:07 · 196 阅读 · 0 评论 -
1024 Palindromic Number
题目大意:某数如果不是回文数就加一个它的翻转数得到一个新数,直到这个数成为回文数。同时限定了进行操作的次数,如果没有超过限定次数就得到回文数那么就输出得到的回文数和进行操作的次数,否则输出经过限定操作数操作后的结果。解题思路:字符串模拟数字相加,使用字符串可以让判断回文数和翻转数字变得简单。代码如下:#include&lt;iostream&gt;#include&lt;cstdio...原创 2019-01-23 18:33:04 · 253 阅读 · 0 评论 -
1059 Prime Factors
题目大意:唯一素数定理的裸题解题思路:本题在我的数论区里有相同的。一个多月没写题了拿到这个题还是10分钟敲完一遍过了,看来掌握唯一素数分解定理了(哈哈哈。。。)代码如下:#include&lt;iostream&gt;#include&lt;cstdio&gt;#include&lt;fstream&gt;#include&lt;set&gt;原创 2019-01-23 18:24:11 · 193 阅读 · 0 评论 -
1096 Consecutive Factors
题目大意:一个正整数可以被分解为一系列正整数相乘,找出最长的连续因子序列。第一行输出长度,第二行输出这个因子序列,如果有长度相同的输出值最小的。解题思路:从小到大暴力枚举连续序列起点然后更新最长序列即可,这个题的输出理解不到位容易炸(这道20分的题错的我怀疑人生),即对于没有连续因数序列的数(比如奇数,偶数中的2,4等等)的输出要注意。对于这样的数,则连续序列的长度为一,序列值为该数的最小...原创 2019-01-23 18:15:53 · 307 阅读 · 0 评论 -
1078 Hashing
题目大意:利用公式 H(key)=key%TSize 输出每个数字保存的位置,如果发生位置冲突则用“二次正方向探查法”寻找该数字的位置,如果始终冲突则输出‘-’。其中“Tsize”是题目中大于m的最小素数。解题思路:素数的问题打个素数表二分一下就可以了,关键在于冲突的解决,根据“二次正方向探查法”公式为“(key+step*step)%Tsize”,其中step范围为从1到Tsize-1(...原创 2018-12-04 17:08:52 · 200 阅读 · 0 评论