PAT
六九八
在读!想要成为一名优秀的程序员!加油!
展开
-
PAT甲级 1078 Hashing (25分) && 1145 Hashing - Average Search Time (25分) 哈希/C++
1078 Hashing (25分)题目大意:插入哈希表,使用平方探测法解决冲突Quadratic probing (with positive increments only) is used to solve the collisions.平方探测法:并且只用正数这两道题目都挺基础的,需要掌握插入数据时冲突解决的方法。#include<iostream> //输入输出流头文件#include<cmath>#include<ve原创 2020-08-02 22:42:42 · 105 阅读 · 0 评论 -
PAT甲级 1085 Perfect Sequence (25分) 双指针/C++
1085 Perfect Sequence (25分)题目大意:给定一串序列,找到符合max<=min * p 子串的size,输出最大的size。采用双指针的方式:先对序列从小到大排序,min一定是最前面的,从前往后依次查找(第一个指针 i),找到第一个大于min * p的数,则停止;从序列的第二小的数开始查找,只需要从上次停止的位置(第二个指针 j)继续查找即可(因为第二小的数 * p > 最小的数 * p,而前面验证过的数据<最小的数 * p,其必定也 < 第二小的数原创 2020-07-01 11:36:13 · 205 阅读 · 0 评论 -
PAT甲级 1090 Highest Price in Supply Chain (25分) DFS/C++
1090 Highest Price in Supply Chain (25分)题目大意:给定每个经销商的供应商,要求找到售出价格最高的经销商有几个,并输出最高价格。其实就是DFS遍历,找到深度最大的结点。在这里的邻接表只存放该结点作为供应商,从该供应商拿货的经销商的结点号。有点像树,只存放孩子结点。相似的题目:1106 Lowest Price in Supply Chain (25分)#include<iostream> //输入输出流头文件#i原创 2020-06-30 12:14:10 · 135 阅读 · 0 评论 -
PAT甲级 1086 Tree Traversals Again (25分) 先序中序转后序/C++
1086 Tree Traversals Again (25分)题目大意:给出栈模拟树的中序遍历过程,要求输出后序遍历。tips:push的顺序就是树的先序遍历(因为每次都是按照根->左子树->右子树,且push都为当前根或子树的根结点);根据push、pop的顺序模拟栈,可以得到中序遍历;根据先序和中序遍历得到后序遍历结果:先序从前往后查找,找到中序当中与其相等的值,根据该值的位置将中序划分为左子树和右子树,递归查找。#include<iostream>原创 2020-06-30 11:30:45 · 138 阅读 · 0 评论 -
PAT甲级 1091 Acute Stroke (30分) BFS/C++
1091 Acute Stroke (30分)题目大意:给定三维数组,要求计算所有volume大于等于T的总volume。这道题感觉还是挺难理解的,看了好久好久也没能理解,还是去网上找了题解以后才做出来。tips:在三维数组中的相邻点,也就是三维空间中:上下左右前后这六个点;如果相邻点为1,则继续考察该点的相邻点;直到相邻点中没有还未考察过的为1的点为止,此时所有1的加和便是volume;也就是相当于图中的bfs,找到每一个为1的相邻点,并以其为中心,寻找下一层;使用三个数组xyz分别表示六原创 2020-06-29 12:00:00 · 189 阅读 · 0 评论 -
PAT甲级 1087 All Roads Lead to Rome (30分) dijkstra/C++
1087 All Roads Lead to Rome (30分)题目大意:给定出发城市,找到到达ROM的最短距离路径,如果有多个最短路径,找到happiness最大的路径,如果多个happiness相同,找到平均happiness最大的路径。使用map来对应城市名string和下标int;dijkstra算法这题还是很需要细心的,测试点2是对最短路径条数计算的考察#include<iostream> //输入输出流头文件#include<原创 2020-06-29 11:48:18 · 337 阅读 · 0 评论 -
PAT甲级 1095 Cars on Campus (30分) map/C++
1095 Cars on Campus (30分)题目大意:给定车的进出时间,要求去掉不合法的数据(只有进没有出,只有出没有进)。问query中的时间点校园内有多少辆车,并且输出在校园中停留时间最长的车序列。这道题真的很需要耐心和细心,考察stl的使用捋一捋思路:去掉不合法的数据,也就是in和out要配对:先对时间进行排序,排完以后必定是一进一出配对的出现,如果不成对出现则舍弃;计算停留时间最长的车:在去掉不合法数据的同时,计算其停留时间,使用map来存放,以便下一次直接找到并增加停留时长;q原创 2020-06-28 10:47:44 · 238 阅读 · 0 评论 -
PAT甲级 1133 Splitting A Linked List (25分) C++
1133 Splitting A Linked List (25分)题目大意:给定链表,把负数放在最前面,小于等于k的数放中间,大于k的放最后(相同条件的数按照链表原来的相对顺序排列)tips:使用map存放node的address,方便把结点串起来(寻找下一结点位置);把负数放到vector的前面,大于k的放到vector后面(倒序输出),把中间部分的数放到另一个vector中,最后按照一定顺序输出所有数。#include<iostream> /原创 2020-06-22 22:23:54 · 127 阅读 · 0 评论 -
PAT甲级 1151 LCA in a Binary Tree (30分) LCA算法/C++
1151 LCA in a Binary Tree (30分)题目大意:给出一棵树的中序和先序遍历,找到这棵树中U和V最小的共同祖先。Tips:使用一个unordered_map记录中序遍历的值以及该值对应的下标,如果U和V的下标在某个值的左右两边,或者等于U和V中的一个,则找到;(无需递归)使用map记录出现过的值#include<iostream> //输入输出流头文件#include<unordered_map>原创 2020-06-21 23:10:22 · 151 阅读 · 0 评论 -
PAT甲级 1118 Birds in Forest (25分) 并查集/C++
1118 Birds in Forest (25分)题目大意:给定n张照片,每张照片中有k只鸟在同一棵树上,再给出几对鸟,判断它们是否在同一棵树上。典型的并查集问题!不懂可以看中国大学mooc上浙江大学的《数据结构》课程(在树(下),讲的很好,也有代码讲解和完整的代码实现)#include<iostream> //输入输出流头文件#include<vector> //变长数组容器using namesp原创 2020-06-20 21:48:45 · 97 阅读 · 0 评论 -
PAT甲级 1146 Topological Order (25分) 拓扑排序/C++
1146 Topological Order (25分)题目大意:给定一个有向图,以及几个序列,要求判定是否为拓扑序列。用邻接表来存放每个结点的前序结点(入度),判断访问当前结点时,其所有前序结点是否都已经访问过,如果都访问过则是拓扑序列,反之则不是。#include<iostream> //输入输出流头文件#include<map> //map映射容器#include<vector>原创 2020-06-18 23:15:40 · 187 阅读 · 0 评论 -
PAT甲级 1137 Final Grading (25分) set+map/C++
1137 Final Grading (25分)题目大意:给定学生的id和 编程题成绩、期中考试成绩、期末考试成绩,如果编程成绩<200,则无最终成绩如果不存在期中考试成绩,输出为-1,并且期末考试成绩为最终成绩如果期中考试成绩<期末考试成绩,则期末成绩为最终成绩反之,则最终成绩=期中成绩 * 0.4 + 期末成绩 * 0.6。tips:计算总成绩时,需要四舍五入;(测试点4)不能用期中成绩为0作为条件来判断是否存在期中成绩;重载 operator< 实现set对于结原创 2020-06-17 23:26:06 · 120 阅读 · 0 评论 -
PAT甲级 1134 Vertex Cover (25分) hash/C++
1134 Vertex Cover (25分)题目大意:给n个结点m条边,对k组序列逐个进行判断,判断序列中是否能包含所有边。如果是,输出Yes否则输出No#include<iostream> //输入输出流头文件#include<vector> //变长数组容器using namespace std; //标准命名空间int n,m,k;int main(){原创 2020-06-16 21:45:47 · 118 阅读 · 0 评论 -
PAT甲级 1129 Recommendation System (25分) set/C++
1129 Recommendation System (25分)题目大意:给出用户访问item顺序的序列,要求在用户访问过程中给用户推荐前面访问次数最多的item。(做题的时候,看了翻译也没理解什么意思,我这理解能力,哭QWQ)输入: indices为用户访问顺序12 33 5 7 5 5 3 2 1 8 3 8 12表示第一次用户访问序号为3的item,第二次用户访问序号为5的item…输出: 当前访问item: 系统推荐的<=3个itemtips:使用set存放,实现自动排序原创 2020-06-16 17:49:25 · 154 阅读 · 0 评论 -
PAT甲级 1149 Dangerous Goods Packaging (25分) map/C++
1149 Dangerous Goods Packaging (25分)题目大意:给定n对不相容的goods,判断所给出的一组goods是否能放在一个容器里。使用map存放序号和与之不相容的goods#include<iostream> //输入输出流头文件#include<map> //map映射容器#include<vector> //变长数组原创 2020-06-16 10:45:55 · 110 阅读 · 0 评论 -
PAT甲级 1121 Damn Single (25分) set/C++
1121 Damn Single (25分)题目大意:给定一些couple,并给出一个序列,找到其companion不在序列中的人。#include<iostream> //输入输出流头文件#include<set> //set集合using namespace std; //标准命名空间int n,m,cnt=0;int main(){原创 2020-06-15 23:43:21 · 153 阅读 · 0 评论 -
PAT甲级 1094 The Largest Generation (25分) 层序遍历/C++
1094 The Largest Generation (25分)题目大意:给定一棵树,要求找到结点最多的层次,输出结点数和层次。#include<iostream> //输入输出流头文件#include<vector> //变长数组容器#include<queue> //队列using namespace std; //原创 2020-06-15 22:22:10 · 135 阅读 · 0 评论 -
PAT甲级 1098 Insertion or Heap Sort (25分) 插入排序+堆排序/C++
1098 Insertion or Heap Sort (25分)题目大意:给定一个未排序的序列,和进行了几轮(也可以为0轮)排序的序列,要求判断使用的是插入排序还是堆排序的方式,并输出下一轮排序结果。这题需要掌握堆结构以及堆排序的代码实现,这里不赘述堆排序的实现啦,有需要的话这里还是推荐中国大学mooc上浙大的《数据结构》课程,在第五讲第1小节,也有完整的代码实现(附上链接)~tips:判定排序方式:根据插入排序特点进行判定,如果不满足,则为堆排序;插入排序特点:排序以后,前面一部分的元原创 2020-06-14 22:56:53 · 203 阅读 · 0 评论 -
PAT甲级 1064 Complete Binary Search Tree (30分) DFS中序遍历/C++
1064 Complete Binary Search Tree (30分)题目大意:给定一串序列,要求构建完全二叉搜索树,输出层序遍历序列。首先要明确:把中序遍历的结果push_back到数组v1里面,直接输出就是中序,排序输出就是层序(排序方式,层数小的排前面,相同层数时,index大的排前面用到同种方法的题目:1127 ZigZagging on a Tree (30分)、1099 Build A Binary Search Tree (30分)(附:题解:1099 Build A Binary原创 2020-06-13 22:46:37 · 141 阅读 · 0 评论 -
PAT甲级 1099 Build A Binary Search Tree (30分) DFS(中序)/C++
1099 Build A Binary Search Tree (30分)题目大意:给定一棵结构已构建好的树,给定一串序列,要求按照二叉搜索树的规则将序列中的数字填入树框架中,再按层次遍历。首先要明确:把中序遍历的结果push_back到数组v1里面,直接输出就是中序,排序输出就是层序(排序方式,层数小的排前面,相同层数时,index大的排前面先将序列从小到大排序,得到中序序列;再中序遍历给定的树(框架),同时记录所在层次,并把对应层次的结点记录在vector中。#include<iostre原创 2020-06-13 22:20:24 · 126 阅读 · 0 评论 -
PAT甲级 1153 Decode Registration Card of PAT (25分) map/C++
1153 Decode Registration Card of PAT (25分)题目大意:给定准考证号和成绩,按照下列查询方式查询:给定level,找到该等级考试的所有学生,按照分数降序排序,相等则按准考证号升序排序;给定site,找到site的所有成绩之和,并输出人数;给定date,找到每个site的人数,按人数降序输出,相等则按site升序输出。输入输出用scanf、printf,并且使用unordered_map代替map,否则会超时自己写完以后,再看柳神的代码,还是一如既往的强原创 2020-06-12 11:46:02 · 233 阅读 · 0 评论 -
PAT甲级 1138 Postorder Traversal (25分) 前序中序转后序/C++
1138 Postorder Traversal (25分)题目大意:给定树的前序和中序,找到并输出其后序遍历的第一个结点。从preorder的第一个结点开始,在inorder中找到对应的结点位置,来划分左右孩子,从而递归找到最左边的叶子结点。#include<iostream> //输入输出流头文件#include<vector> //变长数组容器using namespace std;原创 2020-06-11 23:42:32 · 116 阅读 · 0 评论 -
PAT甲级 1154 Vertex Coloring (25分) map/C++
1154 Vertex Coloring (25分)题目大意:给定一个图,并给每个顶点上色,要求相连的两个相邻顶点的颜色不能相同。给定一串颜色序列,判断是否符合要求,如果符合要求,则输出一共用了多少种颜色;不符合要求则输出No。使用map来存放同种颜色的顶点,map< int , vector < int > > 即 <color,vertices >,再判断vertices中是否有相连的顶点,如果相连,则不符合要求;输入要使用scanf(),否则会超时(测试点原创 2020-06-11 22:34:13 · 176 阅读 · 0 评论 -
PAT甲级 1141 PAT Ranking of Institutions (25分) map/C++
1141 PAT Ranking of Institutions (25分)题目大意:给定考生ID,分数,学校,要求对各个学校总分进行排名。tips:学校code需要全部转换为小写按照分数排名,如果分数相同,按照考生人数从小到大排列,如果考生人数相同,则按照字母表顺序排列。分数需要到最后再转化为int(测试点5)如果用map超时,可以考虑使用unorder_map(不过我用map并没有超时)#include<iostream> //输入输出流头原创 2020-06-11 18:18:13 · 177 阅读 · 0 评论 -
PAT甲级 1139 First Contact (30分) C++
1139 First Contact (30分)题目大意:给定人际关系网,同时给定暗恋者A和被暗恋者B,需要找到与A同性别的朋友C,给与B同性别的朋友D传递表白信息,再由D告诉B。(A和B是同性朋友,C和D是朋友(不一定同性也不一定异性),B和D是同性朋友)。tips:输入不能为int,因为 -0000 和 0000 输入以后都是0,无法判定性别,因此使用string输入;最后输出需要还原为四位的ID;判断条件要细心。#include<iostream>原创 2020-06-10 00:05:10 · 1163 阅读 · 0 评论 -
PAT甲级 1125 Chain the Ropes (25分) 贪心/C++
1125 Chain the Ropes (25分)题目大意:给定n条绳子,把绳子对折后连接起来变成一条新绳子,参与下一次对折连接。要求求出所有绳子对折连接以后的最大长度。长度小的先对折,长度大的后对折。(每一次和长度小的对折)(开始以为理解错题目了,没想到真的就过了)#include<iostream> //输入输出流头文件#include<algorithm> //C++标准模板库的函数using na原创 2020-06-09 22:30:29 · 185 阅读 · 0 评论 -
PAT甲级 1155 Heap Paths (30分) DFS+堆/C++
1155 Heap Paths (30分)题目大意:给定一个完全二叉树,从右到左输出其所有到叶子结点的路径,并判断其是否为堆。看到输出路径很自然的会想到DFS,在每一次往下搜索时,都将结点pop进path当中,直到叶子结点。检查完左孩子再检查右孩子,当左右孩子都检查完,则pop出当前根判断是否为堆可以看我的另外一篇题解~ 题解:1147 Heaps (30分)(下面代码中对于堆的判断较该题解有所改进)#include<iostream> //输入输出原创 2020-06-08 20:02:52 · 162 阅读 · 0 评论 -
PAT甲级 1147 Heaps (30分) 后序遍历+堆的判断/C++
1147 Heaps (30分)题目大意:给定一个完全二叉树的层序遍历,要求判断其是否为堆,并输出后序遍历结果。判断是否为堆,先确定为最大堆还是最小堆(比较开始的两个元素),再比较各个元素与其左右孩子的大小关系。柳婼大神只用了25行代码解决!(传送门,学到了,还是要多看看大神的题解哒~)#include<iostream> //输入输出流头文件#include<vector> //变长数组容器usin原创 2020-06-08 17:48:36 · 207 阅读 · 0 评论 -
PAT甲级 1119 Pre- and Post-order Traversals (30分) C++
1119 Pre- and Post-order Traversals (30分)题目大意:给定前序和后序,要求输出中序,并判断是否唯一。先序:根结点-> 左孩子 -> 右孩子后序:从后往前: 根结点 -> 右孩子 -> 左孩子首先找到根结点,(前序第一个和后序最后一个值为根)后序指针往前移动一位(先将其默认认为是根的右孩子结点),找到前序中对应的值:从前序的根出发直到找到该值(右孩子)中间经过的所有元素为根的左孩子,计算出左孩子的个数。 以此为依据便可以分别在前序和后序中原创 2020-06-08 15:29:36 · 259 阅读 · 0 评论 -
PAT甲级 1123 Is It a Complete AVL Tree (30分) AVL树+层序/C++
1123 Is It a Complete AVL Tree (30分)判断是否为完全平衡二叉树(满足完全二叉树+二叉搜索树+平衡树)题目大意:给定一个序列,按顺序插入到空树中,输出层序遍历结果,以及是否为完全二叉树(YES/NO)如果不太懂AVL树,以及旋转规则等,可以去中国大学mooc上看看浙江大学的《数据结构》课程( 传送门0 ),在第四讲(树(中))。老师讲得很好,也有代码实现,这里就不赘述啦~判断是否为完全二叉树,我采用的是层序遍历,这样就可以一边输出一边判断( 和甲级的另外一题原创 2020-06-07 15:09:54 · 196 阅读 · 0 评论 -
PAT甲级 1108 Finding Average (20分) C++
1108 Finding Average (20分)题目大意:找出给定序列的不符合要求的数,并求出剩余符合要求数字的平均数tips:测试点2:当只有一个数符合要求时,输出为number ,多于一个数字时为numbers还要注意输入为如 .52 和 52. 的情况,也是合法的可参考柳婼大神的代码,使用sscanf和sprintf来解决,简单很多(学到了)#include<iostream> //输入输出流头文件#include<math.h原创 2020-06-07 10:25:25 · 213 阅读 · 0 评论 -
PAT甲级 1115 Counting Nodes in a BST (30分) DFS/C++
1115 Counting Nodes in a BST (30分)二叉搜索树的建立(类似深度优先遍历)题目大意:给定一个序列,建立二叉搜索树,输出最后两层的结点数。二叉搜索树:为一棵二叉树;所有左子树的结点小于等于当前结点;所有右子树的结点大于当前结点;如果只有一个结点,倒数第一行为1,倒数第二行为0。(测试点5还是测试点4)#include<iostream> //输入输出流头文件using namespace std;原创 2020-06-06 23:34:22 · 194 阅读 · 0 评论 -
PAT甲级 1110 Complete Binary Tree (25分) 层序遍历/C++
1110 Complete Binary Tree (25分)判断是否为完全二叉树,我用的是层序遍历的方式进行判断。题目大意:判断输入的树是否为完全二叉树,如果是,输出YES和最后一个结点,如果不是,输出NO和根结点。tips:输入的时候,不能用char!!!(因为输入存在两位数) 开始时因为忽略了这个(测试点234),想了特别久为什么呢到底是为什么呢?QWQ#include<iostream> //输入输出流头文件#include<strin原创 2020-06-06 21:42:37 · 214 阅读 · 1 评论 -
PAT甲级 1126 Eulerian Path (25分) DFS/C++
1126 Eulerian Path (25分)DFS题目大意:所有顶点的度数为偶数的连通图为欧拉回路,如果恰好有两个奇数度,则为semi欧拉回路。采用dfs判断是否连通,同时求出每个顶点的度。也可以在输入过程中记录顶点的度,dfs只需要判断是否连通即可。#include<iostream> //输入输出流头文件using namespace std; //标准命名空间int n,m,last,odddeg;int原创 2020-06-06 11:42:51 · 160 阅读 · 0 评论 -
PAT甲级 1127 ZigZagging on a Tree (30分) C++
1127 ZigZagging on a Tree (30分)题目大意:给定中序和后序遍历,按z型输出层序遍历。首先,把中序遍历的结果一个个push到vector里面,按照层次大小排序输出为层序遍历,相同层数时,下标大的排在前面得到按照层次排序的序列:将后序序列从后往前扫描(根结点->右子树根结点->左子树根结点),在中序序列中找到对应结点,再以此结点为中点,将中序序列划分为左子树和右子树,记录当前结点和层次,再以右子树->左子树的顺序,后序继续往前,中序找到对应结点,继续划分和扫描原创 2020-06-05 23:21:17 · 204 阅读 · 0 评论 -
PAT甲级 1150 Travelling Salesman Problem (25分) C++
1150 Travelling Salesman Problem (25分)判断是否访问所有结点,并回到出发结点。并找到所有符合要求的给定方案中(访问所有结点并成环)的最短路径。#include<iostream> //输入输出流头文件#include<vector> //变长数组容器using namespace std; //标准命名空间int n,m;int a[原创 2020-06-05 21:27:48 · 153 阅读 · 0 评论 -
PAT甲级 1142 Maximal Clique (25分) 图/C++
1142 Maximal Clique (25分)题目大意:找到两两相连的最大clique。需要先判断是否两两相连(首先需要满足的条件,必须先判定),确定是两两相连以后再判断是否为最大clique#include<iostream>#include<vector>using namespace std;int n,m;int a[201][201]={0};vector<int> check;void isClique(int flag[],int kn原创 2020-06-05 11:48:39 · 184 阅读 · 0 评论 -
PAT甲级 1106 Lowest Price in Supply Chain (25分) DFS/C++
1106 Lowest Price in Supply Chain (25分)DFS深度优先遍历题目大意:一个供应商给多个经销商或零售商供应商品,每经过一个经销商,价格将上涨 r% 。要求找到消费者能够拿到最便宜的价格,以及可以从多少家零售商拿到最便宜价格。也就是说:给定一棵树,要求找到最短路径,并求出最短路径数量。#include<iostream>#include<vector>using namespace std;vector<vector<int&原创 2020-06-04 20:57:08 · 146 阅读 · 0 评论 -
PAT甲级 1015 Reversible Primes (20分) 素数+进制转换/C++
1015 Reversible Primes (20分)判断素数+进制转换题目大意:输入一个十进制数,先判断其是否为素数,如果是,则将其转化为D进制,转化以后,将该D进制数翻转,判断翻转后是否还是素数。#include<iostream>#include<cmath>#include<string>using namespace std;bool isprime(int n);bool reverseInD(int n,int d);int main()原创 2020-06-04 09:37:09 · 157 阅读 · 0 评论 -
PAT甲级 1111 Online Map(30分) dijkstra/C++
1111 Online Map (30分)题目大意:给定一个地图,以及源点和目的地点,求出距离最短和时间最短的路径tips:路线有单行道和双行道有相同最短距离路线时,选择时间最短的。有相同时间最短路线时,选择中转站最少的(经过结点最少)两次dijkstra搜索最短路径:#include<iostream> //输入输出流头文件#include<stack> //栈using namespac原创 2020-06-01 22:57:27 · 143 阅读 · 0 评论