PAT甲级【爆刷】
PAT甲级的刷题集合
仰天倀笑
泛泛之辈又何妨,我心无畏少年郎( ̄▽ ̄)"
展开
-
爆刷PAT(甲级)——之链表专题【1032】【1052】【1097】【1133】——一个排序法应对大部分链表题
之前几次PAT,好几次遇见了链表题——将数据以“节点”的形式给出,以“本地址addr”、“值value”、“下一个地址next”的数据形式,让编码者自行逻辑链接操作。由于平时没有刻意关注过,结果实战时按照模拟的方法去做题,要么思维混乱、耗费很多的时间写代码,要么晦涩地模拟出一坨屎。我个人之前,首先是将“地址”信息作为“字符串”读入;其次,节点间的联系使用map把它映射成数字id;最后,再按照数...原创 2020-04-24 10:52:59 · 318 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1145】 Hashing - Average Search Time(25 分)——Hash
艰难的英语单词:Quadratic probing 平方探测increments 英 ['ɪnkrəmənts] n.增量;题意:给一串数,把它们按照 num%v 哈希,如果有冲突就按照平方探测法正向解决冲突,哈希不进去就输出失败。然后给一部分刚刚的数,判断它们是否在哈希入了表内。并最后输出总共进行了多少次查询。难点:其中好几个概念都不是很清楚——平方...原创 2018-08-29 19:44:23 · 664 阅读 · 1 评论 -
爆刷PAT(甲级)——之【1142】 Maximal Clique(25 分)——图论
艰难的英语单词:clique 英 [kli:k] 派系;n.题意:一张无向图,如果几个点之间,任意两个点都可达,叫做一个“块”。给一个图然后好几个序列,请判断它们是不是“块”、或是不“最大的块”(领接任意点都没法再加到块中成为更大的块)难点:1、如何判断是不是块,很简单,各个点枚举一遍就好了2、如何判断这个“块”是不是最大的“块”,可咋办呢?想了半天想不出一个...原创 2018-09-01 18:42:00 · 358 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1087】 All Roads Lead to Rome(30 分)——经典最短路问题,最短路中!book[i]的重要性
题意:给出一张图,每个节点有一个happy值,给出起点、终点、图的边与权值,求出本图的最短路、最短路的条数、最短路但是happy值最大的路径、此路径的平均happy值 共4个参数!难点:N的范围是200,所以本题不是什么最短路优化什么的,就是普普通通的最短路。集和了最短路的路径输出、最短路条数、最短路节点数、最短路情况下的二次条件问题(happy值最大),我觉得特别经典。然鹅!我从下午2点...原创 2018-09-05 19:30:06 · 628 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1143】 Lowest Common Ancestor(30 分)——BST定义
艰难的英语单词:insensitive 英 [ɪnˈsensətɪv] adj.不敏感的; 感觉迟钝的;文章管理题意:给一个BST(二叉搜索树或叫二叉排序树),给的是先序遍历,然后好几个查询,给出两个数,问这两个数的最小祖先是多少,最小祖先就是——深度最低的最接近这两个点的祖先咯,然后更具情况不同输出不同即可。难点:1、根据先序遍历建立BST,我是用链表的形式2、判...原创 2018-09-05 19:38:16 · 312 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1043】 Is It a Binary Search Tree(25 分)——BST二叉搜索树定义
题意:给一个二叉树序列的preoder,判断这个二叉树是不是BST(二叉搜索树),或者是不是它的镜像树;如果是,就输出它的后序遍历postorder,否则输出NO难点:刚开始对序列进行Insert建树,在先序遍历,再匹配,得到了NO,没过样例以为一个BST建树有多种建发,以为自己思路不对;后来问了同学,才晓得题目还有一个镜像树,条件是只要 “or” 一个情况为BST即可的。PS:我这个思...原创 2018-09-06 20:20:18 · 267 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1118】 Birds in Forest(25 分)——并查集赤裸模板题
补发一遍。 题意:好几张图画,每张图画上面的鸟,都在一棵树上。给你好几幅图的鸟,根据询问回答两只鸟在不在一颗树上。难点:并查集,还是裸的并查集,直接跑就行了。Code:#include<bits/stdc++.h>using namespace std;#define inf 10009#define INF 0x3f3f3f3fint father[i...原创 2018-10-05 13:05:43 · 377 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1148】 Werewolf - Simple Version(20 分)——思维
之前考的时候想不到。今日抽空解决一下。题意:N个人各指认一个人是好人还是坏人。其中有两个坏人,剩下的都是好人。而且必然是一个好人和一个坏人说的是谎话。给出他们互相指认的信息,请判断出哪两个是坏人。如果由多种答案,输出最小标号的组合。难点:当初看到数据量N小于等于200,就知道使用暴力。但是没想到怎么去暴力。当时吧以为人物之间的指认关系是像一张拓扑图一样,所以某个人说的如果是谎话的...原创 2019-08-08 20:22:51 · 381 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1151】 LCA in a Binary Tree (30 分)——先序中序建树+LCA问题
此题也是去年考的时候不会。时隔一年才来补一下。这题网上其实很多的讲解了。大概分成三种讲法流派,一种是以柳神为代表的非建树递归找父子关系派;一类是最通俗常规的建树+遍历递归找LCA方法派;还有一类是只贴代码没有讲解或是使用了RMQ倍增高级方法解决LCA问题等。记此博客来简单的缕一缕自己的LCA思绪。脑袋已经锈了很久了。1、先谈一下,最常规的建树+递归遍历LCA方法,本题复杂度就...原创 2019-08-10 22:29:57 · 365 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1103】 Integer Factorization (30 分)——DFS+剪枝
题意:给一个数N(小于400),项数K(小于P),次方P——把数N分解为K项P次方的和的形式。输出时候把系数大的先输出。如果答案有多个,那么选系数和最大的那个;如果还是有多种情况,那么系数更大的那种。(系数必然为正数)难点:本题就是卡时间。虽然N不会太大,但是K和N一样大,而每一位都有T=pow(N,1/P)的可能,就会爆掉。思路:1、如果到达K项,所有项加起来不到N肯定不是答案。2、...原创 2019-08-24 10:45:30 · 234 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1101】 Quick Sort (25 分)——简单思维
题意:给一个无序的正数数组(各数不同),找出,所有左边的数小于它,所有右边的数大于它,的数。输出符合条件的数,以及其个数。思路:一下子就可以想到,所有左边的数小于它,那就是左边最大的数都比它小。所有右边的数都大于它,那就是右边最小的数都比它大。即可。所以什么操作都不需要,直接两个O(N),建立两个数组 l[i] 和 r[i] ,表示 i 下标位置左边最大的数和右边最小的数,扫一遍就建立...原创 2019-08-24 11:19:08 · 252 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1135】 Is It A Red-Black Tree (30 分)——简单模拟
题意:给一个红黑树的先序BST序列,判断是不是红黑树。思路:本题没有红黑树的相当理解也OK,因为题目都给你描述清楚了。也没有任何AVL树旋转操作等。直接BST建树、遍历判断即可,应该算一个看名字很难其实考的是模拟的简单细节题。坑点:1、这是多例输入,所以还要注意回收空间;其中一个小知识是,delete指针以后,系统只是回收了它的空间,但并不会改变指针的值。所以要根节点手动重新赋值为 NUL...原创 2019-08-25 09:52:36 · 343 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1123】 Is It a Complete AVL Tree (30 分)——AVL树建树+层次遍历+完全二叉树的判断
题意:给一个N以及序列(不用考虑元素重复情况)。然后根据这个建AVL树,输出AVL树的层序遍历,以及判断此树是否是完全二叉树。难点:这道题没有什么思路。题目很清晰,考点就是AVL建树+层次遍历+完全二叉树的判断。自己下手的时候才意识到AVL树怎么写来着。。。就去记了一下。。。;层次遍历很简单的,就不多提了;如何判断是否是完全二叉树呢?对于完全二叉树而言,有一个节点没有孩子了,那之后的节点(层次...原创 2019-08-22 12:22:02 · 212 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1153】 Decode Registration Card of PAT (25 分)——模拟细节题(如何解决超时问题!)
此题是去年12月份甲级PAT没有拿到全分的题目。当时最后两个点没有过,所以最可能拿满分的一次机会白白流失掉了。当初最后两个点是因为超时,一时半会没想到如何去优化。回来以后也没有花时间再去解决这个TLE问题。昨天晚上突然想到这题,抽时间写了一下,花了2个小时还是最后两个点没有过,百思不得其解。今天解决了这个问题,觉得有毒。网上各大博客都没有着重点出如何解决这个TLE(超时)问题,也很...原创 2019-08-17 20:09:28 · 814 阅读 · 4 评论 -
爆刷PAT(甲级)——之【1139】 First Contact (30 分)——模拟+两个细节
题意:N个小朋友,告诉你他们的朋友关系。K次询问,对每次询问回答有几种告白方式。告白的方法是——A喜欢B,那么A要找邻接点C,C找邻接点D,D告诉他的朋友B实现告白。要求A和B同性别,C和D同性别,A和B不一定。人数N小于300,询问K小于100.输出所有可行的C和D,按照升序输出。思路:思路可以想到,列举一下A的所有朋友,列举一下B的所有朋友,然后看看他们各自的朋友有几对朋友即可。但是我写的...原创 2019-09-01 20:03:21 · 1388 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1119 】Pre- and Post-order Traversals (30 分)——先序后序建立中序遍历
题意:分别输入一个先序和后序遍历的序列,给出对应的中序遍历,并判断此中序遍历是否唯一。方法与学习过程:本题就是赤裸裸的如何由先序和后序遍历,进行建树or进行中序遍历。学习了三位博客的内容,我就不献丑赘述了~柳神的代码是用来膜的,看一下柳神的宏观思路:https://blog.csdn.net/liuchuo/article/details/52505179这位兄弟的博客主要是由...原创 2019-09-08 09:57:29 · 268 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1144】 The Missing Number(20 分)——排序
题意:给一个序列,输出序列里没有出现的最小的正数。思路:N小于100000,所以排序以后,输出第一个衔接不上的正数,屁股后面那个数就好了。Code:#include<bits/stdc++.h>using namespace std;#define inf 100009#define INF 0x3f3f3f3f#define loop(x,y,z) for(x=...原创 2018-08-28 20:00:27 · 273 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1146】 Topological Order(25 分)——拓扑排序
艰难的英语单词:topological 英 [tɒpə'lɒdʒɪkəl 拓扑(学)的 adj.题意:给一个网络拓扑,给出Q个序列,问哪些不是拓扑排序序列。如果不是,就输出这个序列的编号。难点:序列的编号是从0开始的,也就是说样例的3、4表示的意思是第四个和第五个序列不是拓扑排序序列。算法思路即:保存每个点的入度,然后对于每个序列,都扫一遍序列,如果当前节点入度不是...原创 2018-08-28 19:46:44 · 322 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1001】A+B Format (20)——字符串输出,C++
从今天开始,为9月份的PAT甲级开始做准备,好久没有刷题了,上一次充满激情的刷题是大一的时候,为了能使得自己能够出现在校OJ的正面排名上哈哈哈。每天几道甲级题目,期待自己能快速AC掉甲级的146到题目吧。 学长都说甲级很简单,很好满分的,然鹅自己的半瓶水实力估计也不适用于这个假设吧。简单的题目就不详谈了,直接贴源码了,网上众多博主都有详细的思考历程以及AC思路,我就仅做一个记录、勉励、...原创 2018-08-05 18:40:09 · 361 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1008】 Elevator (20)(20 分)——C++
艰难的英语单词: fulfilled 英 [fʊlˈfɪld] 满足的 adj.题意: 给个电梯表,上行6秒一层,下来4秒一层,每层t停5秒,求总时间。难点: 太简单了,我的羞于讲解。我还以为是有坑的。考虑了停在同一层去掉5s的延时细节以后,反而WA了。这种乙级的题目跑到甲级,我都不知道怎么办。Code: #includ...原创 2018-08-09 19:23:05 · 260 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1002】 A+B for Polynomials (25)——多项式和,C++
艰难的英语单词:(哈哈哈哈哈,顺便复习英语了!) polynomial 英 [ˌpɒlɪ'nəʊmɪəl] 多项式 n. exponents 英 [ɪks'pəʊnənts] 指数 n. coefficients 英 [kəʊɪ'fɪʃənts] 系数 n.题意: 给出两个多项式, 输出多项式相加的结果。 多项式输入...原创 2018-08-05 22:32:31 · 349 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1009】 Product of Polynomials (25)——多项式乘积,C++
艰难的英语单词: polynomial 英 [ˌpɒlɪ'nəʊmɪəl] 多项式 n. exponents 英 [ɪks'pəʊnənts] 指数 n. coefficients 英 [kəʊɪ'fɪʃənts] 系数 n. (呵呵,再次遇见还是不认识)题意:给两个多项式,输出乘积难点:和前面的1002的...原创 2018-08-10 12:50:44 · 258 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1010】 Radix (25)(25 分)——二分+细节
题意:给出两个数,一个数未知进制,一个数已知进制,由数字和字母组成。会告诉你其中一个数是什么进制,你需要回答,有没有可能存在某个进制,使得第二个数能够在这个进制上,和已知的数大小相等。难点:给出的两个数字都是在10的10次方,要用long long ,刚开始我觉得不用longlong,后来发现,给的数字不是十进制,那int是无法存下的。先用枚举写了,结果各种细节错误、代码字母错误这种新...原创 2018-08-10 20:23:32 · 440 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1003】 Emergency (25)——最短路简单变形
题意: N个城市M条边,边是无向变。每个边有权值,以及每个城市都有某个数量的人。 给出起点城市和终点城市,要求从起点到终点的最短距离条件下的—— 路径数,以及最多能捎上多少人!(路径上城市的人数和最大)难点: 数据量N小于500。作为PAT第三题,是最短路的路径数问题以及小变形。Dijkstra、Bellman什么的基本操作都学过,但是一是忘了大半,二是没有吃...原创 2018-08-07 19:12:04 · 324 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1011】 World Cup Betting (20)——C++,循环
艰难的英语单词: tie 英 [taɪ] 平局 n.题意: 给出三局游戏,每局游戏三个赌注,每个赌注分别叫做 W T L ,每局游戏每个赌注都有倍率,问怎么投使得最赚。输出每局游戏选择的W T L,以及最大利润即可。难点:没有难点。两个循环。 但是发现一个很奇怪的bug。 对于题目给定的测试样例: 1....原创 2018-08-12 18:51:24 · 340 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1013】 Battle Over Cities (25)——简单图论dfs搜索
题意:给N个点M个边,再给K个点的编号,输出每个点Ki是割点的时候,强联通块个数-1的值难点:不知道为什么,一直超时了。。。。 输入数据这么小。。。我大胆的假设,结局万万没想到,输入不能用 cin/cout 要用 格式化输入scanf ,否则就会超时!!!Code: 虽然思路都差不多,写法也一样,但我觉得还是不够精炼,向柳巨巨学习。他们都是直接把割点搜索之前设置为 b...原创 2018-08-15 19:18:26 · 275 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1004】 Counting Leaves (30)——树上简单dfs搜索
艰难的英语单词:pedigree 英 [ˈpedɪgri:] 血统; 家谱sake 英 [seɪk] 缘故, 目的hence 英 [hens] 因此,所以题意: 给一棵树,然后输出这颗树每一层的叶子节点数。难点:N小于100。而且节点标记从1开始,根节点就是1,所以说难点就是如何统计出每一层的叶子数即可。简单的想了一...原创 2018-08-08 18:47:53 · 415 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1005】 Spell It Right (20)——英文加法,C++
题意:给一个100位的数字串,给出数字串上各数字和的英文弱智版本翻译。什么叫弱智版本翻译,就是 “15” 只要翻译 “one five”就可以了。。。。。难点: 100位的数字串,全是9那和就是900最大了,最多只要输出3个英文单词。大一级别的题目,毫无难点的手速题。 看来PAT不是按照题目难度排序。。。Code:#include<cstdio>#inc...原创 2018-08-08 19:01:09 · 251 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1006】Sign In and Sign Out (25)——简单排序,C++
艰难的英语单词: consistent 英 [kənˈsɪstənt] 连续的; 不矛盾的 adj.题意: 一组进出记录,找出进来最早的,和出去最晚的,输出他们的姓名即可。难点: 手速题。可惜了,居然写错了几个变量名。可耻。Code:#include<cstdio>#include<cmath>#inclu...原创 2018-08-08 22:18:19 · 310 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1012】 The Best Rank (25)——C++排序练习
题意:每个同学三门科目,以及自己算出他们的平均分。求出每个同学的最好排名的科目并输出。难点:没有难点。直接无脑选择排序都OK,数组开大点,不止1000个同学,开10000就OK了Code:#include<cstdio>#include<cmath>#include<cstring>#include<iostream>#incl...原创 2018-08-13 18:45:24 · 306 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1015】 Reversible Primes (20)(20 分)——大范围质数埃及筛法+进制转换~~~
发现按照这个速度,难以在9月初把甲级题目刷完了,所以我打算跳着刷终点了,水题就先不刷了,实属无奈之举。 艰难的英语单词: reversible 英 [rɪˈvɜ:səbl] 可逆的 adj.题意: 给一个数字N,给一个进制D,如果数字N是质数,N对于D进制,镜像倒置一下以后的真值(比如十进制的37,倒置后变成了73)还是质数,就输出Yes,否则输出No。...原创 2018-08-18 19:31:24 · 617 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1014】 Waiting in Line (30)(30 分)——队列的使用
题意: 银行柜台有N个,每个柜台可以独立干活排队。 每个柜台后面黄线内可以排队,可以排M个人。如果人满了,要么去别的队伍,要么去旁边等着。 一共有K个客户。每个客户自行去排队,客户排队的时候,会选择最快的队伍!每个客户需要Ti的时间处理业务。队伍前面的客户业务办完了,后面的客户办。 银行早上8点开始上班,下午17点关门。 输入Q此询问,每次输出特定的客户,什么时候...原创 2018-08-16 20:33:06 · 1358 阅读 · 2 评论 -
爆刷PAT(甲级)——之【1029】 Median(25 分)——队列问题+内存优化
PS:如果你看完了下面的内容,那很不幸,很多都是没必要的。。。因为我才发现,long int 就是int !(可恶也就是说下面关于内存的什么long long 好像都是我YY出来的,因为数据类型题目已经保证了是int ...... 惭愧惭愧,博客也懒得改了,以下为原答案:题意:给两个有序序列,输出两个序列合并以后的中位数。难点:我很惭愧,这题没有用到高深的算法,没有用到优秀的数据结构,...原创 2018-08-23 19:54:35 · 1170 阅读 · 2 评论 -
爆刷PAT(甲级)——之【1147】 Heaps(30 分)——堆的判别
艰难的英语单词:postorder traversal 后序遍历题意:给一个完全二叉树,判断是最大堆还是最小堆还是都不是。难点:完全二叉树用数组存的时候(个人习惯下标从1开始),左孩子节点是父亲节点*2,右孩子是父亲节点*2+1。对于一个玩完全二叉树来说,N个节点,那么有N/2个叶子!知道上面知识点以后,本题就很简单,从节点1到N/2,判断是否都符合最大堆或者最小堆特性,否则就什么...原创 2018-08-28 07:26:29 · 353 阅读 · 0 评论 -
爆刷PAT(甲级)——之【1007】 Maximum Subsequence Sum (25)——最大子序列和,思维
题意: 给出一个整数序列,长度为N。然后输出这个序列的 “最大子序列和” 和以及子序列的首项、末项。难点:1、题目分析N最大10000,肯定要用O(N)的算法。其实想一下,这就是一个思维题,从左边扫区间到右边,不断保存当前的累加值,用这个累加值去维护当前的最大子序列和,以及记录最大的子序列的区间范围即可。如果当前的值(和)大于已有的最大序列和,就覆盖保存;如果当前的值(和)已经...原创 2018-08-09 16:42:15 · 265 阅读 · 0 评论