PAT
Genius_J
喜欢编程的程序小白
展开
-
PAT 1075 PAT Judge
题意:根据PAT提交记录进行排名,先按总分最高排名,相同再按满分的题数从大到小排名,最后按id从小到大排名。-1表示没有通过编译器,要排除没有通过编译器的用户和没有提交记录的用户。解法:用id当下标,建立二维数组记录每个问题的分数,用-2初始化所有的分数,-1代表没有通过,然后统计总分,然后判断是否有通过编译的,有则将id加入到vector中,然后通过id获取相应的值进行排序输出。总结:这一题一开始要想好如何存储数据,不难偏繁琐。通过编译但是分数为0分的也算在里面,这一点要注意。(用时:56:0原创 2020-08-02 19:53:12 · 119 阅读 · 0 评论 -
PAT 1052 Linked List Sorting
题意:给出n个元素的链表以及首地址,然后按地址 数值 下一个地址的方式输入数据,原创 2020-08-01 15:03:36 · 87 阅读 · 0 评论 -
PAT 1078 Hashing
题意:模拟哈希插入 h(key)=key%Msizeh(key)=key\%Msizeh(key)=key%Msize,然后将输入数值的哈希表中的位置输出,没有则用−-−代替。哈希表的大小要用素数,如果输入不是素数,就取比该数大的最小素数。冲突用平方探测法(仅取正整数部分)解决。解法:输入表大小后,判断是否是素数,不是将其变为素数。用一个数组表示哈希表里的位置是否有值,另一个表示输入值在哈希表中的位置。先进行判断有没有冲突,没有就插入,保存值的位置,有进行平方探测法,平方探测法的上限取哈希表大小的的二原创 2020-07-26 15:37:24 · 105 阅读 · 0 评论 -
PAT 1067 Sort with Swap(0, i)
题意:给出0到n-1的序列,用跟0交换的方式要多少步才能把序列变为顺序。解法:用做值下标,保存其位置。遍历判断是否数组值与下标相同,不是则判断0是否在0位置上,不是则循环交换直到0值在0位置上,然后判断当前数组值是否与下标相同,不是则与0交换位置。总结:一开始写了数组保存值的版本,提交后运行超时,发现如果根据值没法很快找到数值,就要遍历。后面用数组保存位置,思路不够清晰,改乱了好几次。最后还是看一看别人的思路改出来。(用时:2:05:41.23)...转载 2020-07-25 17:05:09 · 106 阅读 · 0 评论 -
PAT 1074 Reversing Linked List
题意:给出k,链表原创 2020-07-19 15:34:49 · 120 阅读 · 0 评论 -
PAT 1089 Insert or Merge
题意:根据输入的原始序列和排序算法产生的中间序列,判断是插入排序还是归并排序。解法:直接对原始序列进行插入排序每一步判断是否与中间序列相同,若是,则再进行完下一步后输出;不是则进行归并排序,归并排序从头开始排序,判断与中间序列是否相同,是则进行完下一步输出,不是则继续排序。总结:插入排序是前面排好序的部分有序,后面部分与原始序列还是相同。可以根据这个进行判断是否是插入排序。这一题难点在归并排序,参考了书上的讲解和代码,写了很久才写出来。原来进行归并排序时,我不是直接从原始序列开始,而是从头开始找到排转载 2020-07-18 17:05:57 · 116 阅读 · 0 评论 -
PAT 1098 Insertion or Heap Sort
题意:给出数字n,接下来是一组数字序列,后面是这组数字经过一定次数排序后的序列,根据当前排序后的序列判断是插入排序还是堆排序。堆排序将序列分为两个部分,一个是未排序的大顶堆部分,另一个是排好序的部分,前半部分为大顶堆。判断完后,再输出下一个关键字排序后的结果。解法:判断:因为堆排序,前半部分是大顶堆,根据第一个元素是否大于第二个判断是堆排序。插入排序主要找到第一个小于前一个元素的数,然后进行排序。堆排序,将大顶堆的第一个元素和最后一个元素交换,找到第一个大小比第一个元素的大的数,它的前一个位置就是原创 2020-07-12 16:03:12 · 111 阅读 · 0 评论 -
PAT 1070 Mooncake
题意:有几种月饼,每种数量不一样,每种总价不一样,现在有市场需求d,求最大的获利,每种可以取一部分。解法:求出平均单价,按单价从大到小排序,然后判断数量是否小于剩余市场所需,是取所有数量,不是取部分,直到剩余市场所需为0。总结:这一题刚开始没理解,后来看懂了,很快写出来了,但是第三个点通不过,试了好几次都没成功,看一下别人讲解才发现数量应该取double类型,仔细看看题目也没有明确说是哪种类型。(用时:55.39.47)#include<iostream>#include<原创 2020-07-11 15:43:57 · 135 阅读 · 0 评论 -
PAT 1071 Speech Patterns
题意:给出一段语句,求其中出现最多的词。词是被其他字符分隔或在行头、行尾的由字母、数字组成的连续字符串。解法:用set保存词,用map保存其中出现的次数。还要用到将大写转化为小写的函数。总结:这一题主要是感觉考对字符串操作熟不熟悉,个人对c++的string操作函数不是很熟悉,有的函数是搜索的。这题写得有点繁琐了。(用时:38:44.51)#include<iostream>#include<algorithm>#include<cstdio>#inc原创 2020-07-05 15:01:20 · 130 阅读 · 0 评论 -
PAT 1079 Total Sales of Supply Chain
题意:有供应商、经销商、零售商三种,商品是从供应商到经销商或零售商,供应商的商品原价为p,每经过一层价格涨r%,只有零售商面对顾客。给出n个供应链上的人员(编号从0到n-1,0为根部供应商),p为原价,r为涨价幅度,接下来每个人员给出k,k=0为零售商,后面为商品总数;k!=0k!=0k!=0为经销商,k代表与其关联的下一层经销商或零售商的总数。,求顾客所面对的所有商品价格的总和解法:用深度优先搜索遍历。总结:这一题比较简单,但是我用保存下来的k当做经销商的下层总数,而不用vector的size函原创 2020-07-04 15:35:04 · 82 阅读 · 0 评论 -
PAT 1063 Set Similarity
题意:给出几个集合,求其相似度。相似度为两个集合里的相同元素/两个集合中所有不同的元素数量,一个集合中多个相同的值只取一个。解法:用set,set有一个find函数。遍历一个集合,用另一个集合的find查找是否存在相同的元素。反思:一开始使用两个for循环来遍历,最后一个测试点超时了,后来想起来set有个find函数,修改一下就通过了,算是一道简单的题,但是还是花了一些时间。(用时:30:01.19)#include<iostream>#include<algorithm&原创 2020-06-27 15:44:53 · 126 阅读 · 0 评论 -
PAT 1066 Root of AVL Tree
题意:根据输入的数值,形成平衡二叉树(AVL),然后输出根节点的值。解法:老老实实的实现AVL树:四种不平衡情况:1、插入到A的左子树的左子树上,右旋A,2、插入到A的左子树的右子树上,左旋A的左子树,再右旋A。3、插入到A的右子树的左子树上,右旋A的右子树,再左旋A,4、插入到A的右子树的右子树上,左旋A。反思:这一题还是写不出来,对于AVL树的掌握还是不到位,拿出大学课本,用上面的代码实现一下。对比了一下别人写的代码,课本上的代码比较难理解一点。每次更新往上更新平衡因子,判断树是否变转载 2020-06-26 16:46:36 · 109 阅读 · 0 评论 -
PAT 1086 Tree Traversals Again
题意:根据栈操作的产生树的中序遍历,求后序遍历。解法:栈的压入过程就是先序遍历。将先序和中序结果保存起来求后序。根据先序结果的值在中序上的位置,然后求出左右子树的中序遍历上的范围进行遍历,同时求出左右子节点在后序中的位置。反思:类似的题目做过好几次,还是会写起来有点繁琐,感觉是对这块理解还不够。看到有人是通过模拟后序遍历的过程做的,先遍历左右子树后将当前值写入,写得很简洁。这一题似乎没有明确说明值是唯一的,但是还是通过了。(用时:1:02:18.30)#include<iostream&原创 2020-06-25 15:46:46 · 102 阅读 · 0 评论 -
PAT 1026 Table Tennis
题意:乒乓球馆有k张桌子,m张vip桌,8:00-21:00营业。球员到达后总是选择编号小的桌子(编号:1-m),使用时间最多不能超过2个小时。vip桌空闲,正好有vip的球员在,选择第一个到的vip球员,如果没有就分给普通球员。如果没有vip桌空闲,则vip球员跟普通球员一样。给出所有球员的到达时间,使用时间,是否是vip,求结束营业时所有球员的到达时间,开始使用桌子的时间,等待时间(四舍五入),所有桌子使用的人次,如果21点后还没有开始使用桌子的,不计算在内。反思:这一题主要考逻辑,逻辑要很清晰。转载 2020-06-21 19:16:35 · 146 阅读 · 0 评论 -
PAT 1080 Graduate Admission
题意:根据给出的n个学生(0 到n-1)的成绩和k个申请学校,m个学校(0到m-1)的录取人数,输出学校录取的学生数量,成绩按(G),原创 2020-06-20 15:55:08 · 103 阅读 · 0 评论 -
PAT 1072 Gas Station
题意:有转载 2020-06-14 17:09:26 · 128 阅读 · 0 评论 -
PAT 1095 Cars on Campus
给出n个汽车的出入记录,给出k个询问,每次询问时间,求该时间点停车场的停车数量。最后输出停车总时长最长的车,输出车牌,如果有多辆就按字母顺序输出结果,最后输出总时长。出入记录要有in和out成对出现才有效,一辆车连续多次in,取最后一次,连续多次out,取第一次。这一题,用map将字符串名称与数组下标对应起来,将时间转化为数字,先把所有记录排序,再将对应的有效记录分配给不同的车子,根据每辆车的当前出入情况判断:1、当前为in,如果所有记录中当前为in,则删除车子中的这一条记录,将最新记录加入。(导致可原创 2020-06-13 17:32:56 · 99 阅读 · 0 评论 -
PAT 1068 Find More Coins
用n个硬币买价值为m的东西,使得正好几个硬币加起来价值为m。存在,输出最小的序列,若不存在,输出"No Solution"。用深度优先搜索的算法最后只能得到29分。看了一下别人的解法,是个01背包问题,用动态规划,不是特别理解。这类题目以后要再研究一下。(用时:1:30:27.21)(参考:https://blog.csdn.net/liuchuo/article/details/52278809?utm_source=blogxgwz6)...转载 2020-06-07 16:22:32 · 136 阅读 · 0 评论 -
PAT 1057 Stack
实现一个栈,能返回中间值,如果n是偶数,则中值定义为第n/2个大的元素,若n是奇数,则中值定义为第(n+1)/2个大的元素。一开始使用排序直接就超时了,后来改用排序+二分法查找还是超时,看一下的解法,用的是树状数组,存储的是元素的个数。树状数组这次也是简单了解了一下,以后还需要研究一下。(用时:2:37:00.48)(转载:https://blog.csdn.net/liuchuo/article/details/52231409)...转载 2020-06-06 17:21:31 · 115 阅读 · 0 评论 -
PAT 1034 Head of a Gang
一个gang的总通话用时大于k,且人数大于2,gang的head为其中总通话用时最长的人。根据输入求有几个gang,并按字母顺序输出head和人数。这一题用并查集和图的遍历,比较繁琐,先要求每一个的总通话时长,合并到一个集合后(合并时可以按通话时长选择节点,通话时间长的为被指向的节点),求每一个集合的总通话时长和人数,根据条件判断是否符合条件。审题不仔细,有一个点错误,后来重新审一遍题,发现head是保证唯一的。(用时:1:47:36.95)#include<iostream>#inc原创 2020-05-31 16:20:42 · 135 阅读 · 0 评论 -
PAT 1091 Acute Stroke
给出M*N大小的MRI切片图,总共有L层,求体积大于T的坏死区域的总体积,1代表坏死。这一题,一开始因为英文问题,理解半天。主要是求三维数组中值为1的像素区域体积大于T的总体积,一个值为1的像素默认为体积为1,遍历一个点。一开始以为是动态规划,想了半天没想出来,就看了一下别人思路,用广度优先搜索遍历其所有相连值为1的点(正上,正下,前后左右),将遍历过的点标记。...转载 2020-05-30 17:15:20 · 124 阅读 · 0 评论 -
PAT 1038 Recover the Smallest Number
给出数字,求其组成最小的数,输出时第一位不能是0。开头一看,没什么思路,在写的过程的发现可以用排序,从个位开始比较,如果位数不够就取最高位,用了插入排序,发现有错误和超时,有一个测试点的结果是0,修改后,还是有错误测试点和超时。于是看了一下别人如何做的,结果也是用排序,直接用sort,判断条件是a+b<b+aa+b<b+aa+b<b+a,这个条件很简洁,也算是学习到了。(用时:1:21:11.37)...转载 2020-05-24 15:37:42 · 135 阅读 · 0 评论 -
PAT 1087 All Roads Lead to Rome
有N个城市,M条无向边,从某个给定的起始城市出发,前往名为ROM的城市。每个城市(除了起始城市)都有一个幸福值和花费。求从起点到ROM所需要的最少花费,输出其路径。如果路径有多条,给出幸福值最大的那条。如果仍然不唯一,选择路径上的城市平均幸福值最大的那条路径。输出花费最少的路径的数量,输出花费,输出最大幸福值,最大平均幸福值,然后输出路径。这一题用Dijkstra最短路径。算是复习了一下Dijkstra最短路径,把。(用时:4:25:15.83)...转载 2020-05-23 22:29:33 · 107 阅读 · 0 评论 -
PAT 1049 Counting Ones
找到1到转载 2020-05-17 16:05:18 · 111 阅读 · 0 评论 -
PAT 1045 Favorite Color Stripe
给出最喜欢的颜色的颜色顺序,在颜色条纹中找出最长的按相应顺序排列的序列,输出其长度。这一题是求最长公共子序列。一开始不知道怎么做,用深度优先搜索,最后两个测试点超时了。看了一下别人的讲解,改用动态规划,用了一个二维数组,一个用于当前状态,还有记录上一次的状态,根据上一次相同位置的状态和当前状态的前一个取最大值,以及是否等于当前值决定是否加一。#include <bits/stdc++.h>using namespace std;int main(){ int n;转载 2020-05-16 16:14:08 · 121 阅读 · 0 评论 -
PAT 1076 Forwards on Weibo
给出每个微博用户关注的人的数量和下标,求一个用户发微博,最多会有多少个人转发(他粉丝会转发,他粉丝的粉丝会转发他粉丝),计算前L层的人数。这一题用广度优先搜索就可以做,难点是要把握住层数。我一开始以为用深度优先搜索也可以做出来,写好一提交有两个测试点没有过去,看一下别人基本都是用广度优先搜索做出来的,用深度优先搜索的基本会有错误。后来尝试多次后,发现用深度优先搜索可能不能做出来,因为会出现跟路径有关的问题,如果存在路径中存在环(即互粉现象),先遍历长路径后,可能遍历不了短路径。改成用set存储路径中的节转载 2020-05-10 16:23:06 · 212 阅读 · 0 评论 -
PAT 1030 Travel Plan
给出连接的城市的高速距离和花费,求起始城市和目的城市之间的最短距离路径,如果有相同距离的最短路径,选择花费最小的路径。可以使用迪杰斯特拉最短路径求出最短路径,再用深度优先搜索求出最小花费。我这里直接使用深度优先搜索求出最短路径和最小花费,发现成功提交,没有超时。(用时:40:31.74)#include <bits/stdc++.h>using namespace std;...原创 2020-05-05 15:08:51 · 112 阅读 · 0 评论 -
PAT 1053 Path of Equal Weight
给出n个节点的树,m个非叶子节点,求从根节点到叶子节点的权值等于s的路径,并把其权值从根节点到叶子节点输出,如果有多条,按非递增顺序输出,(序列{A1,A2,A3,...,AnA_1,A_2,A_3,...,A_nA1,A2,A3,...,An}大于序列{B1,B2,B3,..,AmB_1,B_2,B_3,..,A_mB1,B2,B3,..,Am},存在1≤\leq≤k<&l...原创 2020-05-03 15:25:56 · 137 阅读 · 0 评论 -
PAT 1064 Complete Binary Search Tree
根据输入的数值求完全二叉搜索树。先对数组进行从小到大排序,即为树的中序遍历,然后重现中序遍历对当前节点进行赋值。这一题一开始没有想到这种方法,还是对树的理解不够。(用时:54:39.76)...转载 2020-05-01 15:20:57 · 97 阅读 · 0 评论 -
PAT 1139 First Contact
题意:求a到b中间经过两个节点的路径,与a相连的节点属性(性别)与a一样,与b相连的节点属性(性别)与b一样,求出数量,并按第一节点非递减顺序输出每一条路径的节点,第一个节点一样按第二个节点从小到大输出。在输入所有边后,将每个点的相连的边按节点大小从小到大排序,然后进行深度优先搜索,先找到a的同性节点(不能是b),再找b的同性节点(不能是a),保存路径,统计数量。这一题刚写完就有几个点通不过,...转载 2020-04-25 16:39:59 · 218 阅读 · 0 评论 -
PAT 1151 LCA in a Binary Tree
这一题给出两个节点,找出在二叉树上的最近的公共祖先。开头一想可以先建树然后保存路径找结果的方法,后来觉得这样代码量会很大,而且短时间写不出来,可能存在时间超限的风险。改为类似于并查集的思维,用元素的下标指向父节点的下标,用的是先序数组的下标,先用先序遍历和中序遍历按照建树的思维对将元素的下标指向父节点的下标,完成一棵"反向树"。先用map来判断元素是否在树中,然后用两个节点的下标去查找结果,先...原创 2020-04-18 16:40:01 · 118 阅读 · 0 评论 -
PAT 1131 Subway Map
给出起始站和终点站,求停站最少的路径,如果有相同的,就选择换乘最少的。这一题,最短路径容易求出来,就是换乘如何表达比较难,想了半天没有好的表示换乘办法,看了别人方法,用map把号码*10000+另一站号表示为两个在同一条线,简洁明了,易表达...转载 2020-04-12 19:38:59 · 116 阅读 · 0 评论 -
PAT 1135 Is It A Red-Black Tree
根据给定的二叉搜索树,判断是否是红黑树。符合红黑树的条件:1.、节点是红色或黑色。2、根节点是黑色。3、 每个叶子节点(NULL节点,空节点)是黑色的。4、 一个节点是红色,其左右子树为黑色5、 对于树上任何节点来说,其左右子树的黑色节点个数是一样。这里主要判断的条件有三个:1、根是黑色(第二个测试点)2、一个节点是红色,其左右子树为黑色。3、对于树上任何节点来说,其左右子树的...转载 2020-04-11 16:58:43 · 111 阅读 · 0 评论 -
PAT 1111 Online Map
这一题意根据点之间的距离和时间,求某两点之间的距离最短路径和时间最短路径。距离最短路径有相同,输出时间最短的。时间最短路径有相同,输出经过的节点最少的。按指定的格式输出。这一题用djs最短路径,一开始使用了dfs递归写法,但是由于函数递归的效率低下,导致最后一点超时。然后想改成循环的写法,看了一下自己以前关于最短路径的循环的代码,改了半天,发现没有通过,才发现自己用错了,用成了队列。dfs应...转载 2020-04-06 22:31:30 · 157 阅读 · 0 评论 -
PAT 1103 Integer Factorization
题目的意思是给定n,k,p,求是否存在k个正整数,每个数的p次幂相加的结果等于n。有,输出k个数相加的结果最大的那个,如果有多个,输出序列从大到小排最大的那个(从左往右比较,若i<l,ai=bi,al>bli<l,ai=bi,a_l>b_li<l,ai=bi,al>bl,则序列a大于序列b)。这一题一开始毫无思路,如果暴力肯定会超时。随后查了别人的讲解,...转载 2020-04-05 16:21:29 · 229 阅读 · 1 评论 -
PAT 1119 Pre- and Post-order Traversals
根据树的先序遍历和后序遍历得到中序遍历,如果树是唯一输出Yes,否则输出No。然后输出中序遍历(如果不唯一,随便输出那一棵)。题目读起来,写起来不轻松。我主要将树分为三种情况:1、有一棵子树,则树是不唯一,默认为左子树。2、有左右子树3、没有子树,为叶子节点。这一题难点跟以前类似的题目一样,要把边界写对。我是根据先序在后序的上位置进行匹配,然后计算中序的下标,一个个对应赋值,还要计算中序...原创 2020-04-04 19:35:59 · 165 阅读 · 0 评论 -
PAT 1107 Social Clusters
根据每个人的爱好,有相同的爱好就是同一个社交网络中,求有几个社交网络,每个的人数从大到小输出。这一题是集合的题目,一开始想到了并查集,但不知道如何把爱好和人关联起来,以为是其他办法,看了一下别人的讲解,果真用的是并查集。建立爱好的数组,将这一爱好的人都放入,分别将每个爱好中的人合并到一个并查集中去。最后用set统计并查集的数量,再用一个数组统计每个并查集的人数,然后排序。反思,对于并查集的理...转载 2020-03-29 15:57:45 · 110 阅读 · 0 评论 -
1123 Is It a Complete AVL Tree
这一题是根据输入,生成一棵二叉平衡搜索(AVL)树,然后输出其层次遍历,判断是否是完全二叉树,是输出YES,不是输出NO。AVL树虽然知道,但是从来没写过,难点在于如何进行平衡,进行左旋右旋,有四种情况:1、在左子树的左子树上插入导致不平衡,进行右旋操作。2、在左子树的右子树上插入导致不平衡,进行先左旋后右旋操作。3、在右子树的右子树上插入导致不平衡,进行左旋操作。4、在右子树的左子树上...原创 2020-03-28 19:58:48 · 223 阅读 · 0 评论 -
PAT 1147 Heaps
给出m次查询,每次都是n长度的树。每次给出一棵完全二叉树的层次遍历,判断其是否是堆,是最大堆(父节点>=>=>=子节点)还是最小堆,不是堆输出Not Heap,最大堆输出Max Heap,最小堆Min Heap,然后再输出该树的后序遍历。先根据前两个元素的值假设该树是最大堆或最小堆,然后直接进行后序遍历,遍历中判断父节点是否符合该假设。(用时: 25:40.31)#incl...原创 2020-03-22 14:59:04 · 244 阅读 · 0 评论 -
PAT 1115 Counting Nodes in a BST
二叉搜索树(左子树的元素<=<=<=父节点<<<右节点),求最下面两层的节点个数,以及其总和。这一题建立二叉搜索树,建立时记下层数,求出最大层数,然后遍历整个树,寻找等于最大层和第二层的节点,记下个数。建立树的时候才发现,自己对指针的理解还不够,出了一些错误。这一题难度不大,算是考基础的一题,自己没有马上写出来,也是对建立树的过程还没掌握,在解题中还老想着寻...原创 2020-03-21 15:56:48 · 104 阅读 · 0 评论