![](https://img-blog.csdnimg.cn/20200225161526310.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
PAT (Advanced Level) Practice
如题
Yuhan の Blog
这个作者很懒,什么都没留下…
展开
-
PAT甲级 1081 Rational Sum (20分)
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805386161274880思路:分数在加减时,将两个运算数的分母都化成最小公倍数就好了;最后一个测试点是输出0,不是很懂题目为什么不告诉你0值怎么输出;整数部分是0只要输出分数部分,分数部分是0呢?自己猜一个值输出吗?代码:#include <bits/stdc++.h>using namespace std;typedef lon原创 2020-09-03 14:42:53 · 156 阅读 · 0 评论 -
PAT甲级 1026 Table Tennis (30分)
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805472333250560思路:据说现在PAT已经不考这种大模拟了,准备PAT的同学可以酌情跳过节省时间~我的想法是用优先队列保存即将要发生的事件(一共三种事件),先发生的排在前面。用户排队的情况我是使用两个队列分别存储vip和普通用户的。接下来我们一个一个处理这些事件即可:(1)有vip过来打球。若有空桌,则先选择vip桌中序号最小桌,若无空vip桌则选原创 2020-08-10 14:06:47 · 275 阅读 · 0 评论 -
PAT 甲级 1104 Sum of Number Segments (20分)
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805363914686464思路:1.我们用序号[0…n-1]来给这n个数标号,观察可以发现包含第i个数的连续段起点只能在0 ~ i,终点只能在i ~ n-1;因此包含序号i的数的连续段一共有(i+1)*(n-i)个;2.如果用double存储、累加求和结果,会因为double的内存存储精度问题而产生失精的结果;解决方法是将数据放大一定的倍数从而改用long原创 2020-08-04 17:59:47 · 180 阅读 · 0 评论 -
PAT甲级 1106 Lowest Price in Supply Chain (25分)
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805362341822464思路:1.考察树的dfs;2.零售商只可能在叶子节点,若从root到零售商所经历的边的数量为aaa,则该零售商的价格就是p∗(1+r∗0.01)ap*(1+r*0.01)^ap∗(1+r∗0.01)a;代码:#include <bits/stdc++.h>using namespace std;const原创 2020-08-03 22:49:12 · 153 阅读 · 0 评论 -
PAT甲级 1105 Spiral Matrix (25分)
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805363117768704思路:1.将所给序列倒序排序;2.一圈一圈地将序列逆时针填入矩阵;我的思路是使用变量x,y来表示当前我们所需操作的矩阵位置,然后按如下顺序挨个填入数据;重点是对x,y坐标位置的控制;代码:#include <bits/stdc++.h>using namespace std;int N, m, n;i原创 2020-08-03 22:46:02 · 181 阅读 · 0 评论 -
PAT 甲级 1107 Social Clusters (30分)(并查集)
思路:1.先用并查集算出所有交友圈集合;2.再挨个遍历每个用户,查询他在哪个集合,相应集合数量++,最后数量倒序输出即可;代码:#include<bits/stdc++.h>using namespace std;const int maxn=1005;int n,par[maxn],rnk[maxn],tag[maxn],peo[maxn];void init_(...原创 2019-12-05 12:55:50 · 177 阅读 · 0 评论 -
1123 Is It a Complete AVL Tree (30 分)
这题的旋转过程参考的柳婼学姐的,链接:https://blog.csdn.net/liuchuo/article/details/53561924思路:发现左右高度不平衡的点会遇到四种情况:1.左子树的左边插入了结点;2.左子树的右边插入了结点;3.右子树的左边插入了结点;4.右子树的右边插入了结点;解决办法分别是:1.以此结点右旋;2.以此结点的左结点左旋,再以此结点右旋;3...原创 2019-09-02 12:05:33 · 198 阅读 · 0 评论 -
PAT 甲级 1103 Integer Factorization (30 分)
这题的测试点5从一直超时,然后慢慢改到400ms再改到200ms+,再到现在10几ms,真辛酸啊。。思路:1.基本想法就是枚举,暴力解,最开始用的循环做的枚举,后来发现利用递归去做更容易实现剪枝;2.将[1,n-k+1]区间的整数的p-1次方用数组存储起来,将[1,(n-k+1)1/p]区间的整数的p次方用数组存储起来,以免之后用到时反复计算;3.然后从下标1到k开始dfs,记录此次递归的...原创 2019-09-01 14:39:25 · 554 阅读 · 0 评论 -
PAT 甲级 1102 Invert a Binary Tree (25 分)
思路:1.在构造二叉树时将左右结点互换;2.中序遍历二叉树,遍历时将遍历序列用数组存储起来,就是中序序列;3.每遍历到一个结点,将这个结点放入它所在层次的序列后面,因为我们在中序遍历时可以保证同一层次,左边的结点一定会在右边的结点之前遍历到;代码:#include<iostream>#include<vector>#include<string>...原创 2019-08-29 18:59:47 · 159 阅读 · 0 评论 -
PAT 甲级 1101 Quick Sort (25 分)
思路:1.将数字序列按原序列存储,再用另一个数组存储排序好的序列;2.依次按序号遍历,同时以一个变量记录左边出现过的最大数,两个序列中位置相同的数、且此数左边最大的数比它小,那么这个数就可作为候选数;3.最后在结束时要多输出一个换行,测试点2应该是没有候选数,那么输出候选数的那行需要用空行代替;代码:#include<iostream>#include<vector&...原创 2019-08-28 16:11:43 · 129 阅读 · 3 评论 -
PAT 甲级 1100 Mars Numbers (20 分)
思路:分4种情况:(1)为0或tret;(2)输入为阿拉伯数字,除13加上取余13即可;(3)输入为长度为3的字符串,可能是高位也可能是低位;(4)输入为长度为7的字符串,高位*13+低位;代码:#include<iostream>#include<cstdlib>#include<string>#include<map>usi...原创 2019-08-26 23:39:40 · 134 阅读 · 0 评论 -
PAT 甲级 1125 Chain the Ropes (25 分)
思路:1.越先被折叠的绳子被折叠次数越多,让短的绳子先被折叠即可;2.最后输出不大于绳子长度的最大整数;代码:#include<iostream>#include<set>using namespace std;int main(){ int n; cin>>n; multiset<int> st; for(int i=0;i&...原创 2019-08-23 15:36:40 · 104 阅读 · 0 评论 -
PAT 甲级 1124 Raffle for Weibo Followers (20 分)
代码:#include<iostream>#include<map>#include<vector>using namespace std;int main(){ int m,n,s; cin>>m>>n>>s; map<string,bool> mp; vector<string> ...原创 2019-08-23 15:34:46 · 175 阅读 · 0 评论 -
PAT 甲级 1131 Subway Map (30 分)
思路:1.将每站的邻站和与邻站在哪条地铁线记录下来;2.bfs,搜索距离最近的站台,如果搜索到终点站且距离相等的站台搜索完毕即break;3.用数组记录此站台是否被访问过,如果此站台被访问且它不是换乘站也不是终点站那就跳过它;4.如果被访问的站台已经被访问过且它是终点站,我们需要注意比较换乘次数;5.如果被访问的站台已经被访问且它是换乘站,我们不仅需要比较历史换乘次数,还要考虑往下一站是...原创 2019-08-22 15:43:52 · 234 阅读 · 0 评论 -
PAT 甲级 1041 Be Unique (20 分)
思路:以key值存储次数,然后依次遍历就好了;代码:#include<iostream>#include<vector>int arr[10000];using namespace std;int main(){ int n; scanf("%d",&n); vector<int> v(n); for(int i=0;i<n;...原创 2019-08-17 15:26:59 · 74 阅读 · 0 评论 -
PAT 甲级 1134 Vertex Cover (25 分)
思路:遍历每一条边,两个结点至少要有一个在所给结点中代码:#include<iostream>#include<vector>#include<unordered_map>using namespace std;vector<pair<int,int>> v;unordered_map<int,bool> mp...原创 2019-08-17 10:39:11 · 126 阅读 · 0 评论 -
PAT 甲级 1133 Splitting A Linked List (25 分)
思路:1.按结点顺序遍历三次,分三次输出 ;2.输出使用“%05d”;3.遍历终止条件是address!=-1,不能写for(int i=0;i<n;i++),因为n个结点里存在无效结点(真坑);代码:#include<iostream>using namespace std;pair<int,int> p[100000];bool isf=true;...原创 2019-08-16 18:36:18 · 123 阅读 · 0 评论 -
PAT 甲级 1130 Infix Expression
思路:1.先建树,再对树进行先根遍历;2.若遍历某个结点不是叶子结点且不是根结点,则此次的表达式要用括号包围;3.值一定是叶子结点,运算符一定不是叶子结点;代码:#include<iostream>#include<unordered_map>using namespace std;struct node{ string val; int left,ri...原创 2019-08-21 18:19:44 · 113 阅读 · 0 评论 -
PAT 甲级 1116 Come on! Let's C (20 分)
思路:1.用两个大数组分别存储每个参赛者的rank,存储参赛者信息是否已被查阅;2.先判断参赛者的rank是不是0,如果是0则未参赛;3.其次查阅参赛者信息是否已被查阅;4.再判断他的rank是不是1;5.然后判断rank是不是素数;6.剩下的都拿巧克力;7.查阅后记得更新查阅数组;代码:#include<iostream>#include<cmath>...原创 2019-09-02 16:46:02 · 216 阅读 · 0 评论 -
PAT 甲级 1117 Eddington Number (25 分)
思路:1.将所有的miles存入vector,然后降序排列;2.注意题中所述是more than E miles;3.依次遍历vector,下标为i就是第i+1天,取min(i+1,v[i]-1),就是此次的最大结果,将它与之前的E比较,取最大的那个;代码:#include<iostream>#include<vector>#include<algori...原创 2019-09-02 17:22:52 · 141 阅读 · 0 评论 -
第一次参加PAT的经历和感受
考试流程:我是在金陵科技学院(南京考点)考的,13:30考试,我12:30就到了,考试开始之前20min,老师会在门口检查证件然后入场,一般是检查准考证+身份证,如果没有身份证使用其它证件也是可以的,比如我身份证前几天丢了我是用的社保卡;考试开始之前会给时间让我们调试机器,测试编译环境,同时分发草稿纸,读考生须知之类的,然后到点就可以点开始考试了;考试过程中有任何问题的都可以举手询问老师,因...原创 2019-09-09 12:45:11 · 801 阅读 · 0 评论 -
PAT 甲级 1111 Online Map (30 分)
思路:1.两次dijskra即可,用dfs会超时,我剪枝剪了好久还是会超时…2.每次判断是否最短(最快)的时候依据题目中的两个标准;3.用vector保存每个点可达的下一个点,用邻接矩阵存储距离和时间,用数组标记每个点是否已知最短(最快),用数组记录每个点此刻离起点的距离、最短路径的最短可达时间、最短时间、最短时间的最少周转次数,再用数组保存每个点的最短路径前驱结点和最短时间前驱结点;4....原创 2019-09-07 11:19:03 · 381 阅读 · 0 评论 -
PAT 甲级 1110 Complete Binary Tree (25 分)
思路:1.首先设定root等于1+2+…+n,即(n-1)*n/2,然后每输入一个孩子,如果它不是空的,就减去相应值,最后就会得到根节点;2.用vector<int,pair<int,int>>存储每个结点的状态,孩子为空设值为-1;3.利用队列层次遍历二叉树,同时在循环外用值记录当前遍历到的结点,因为最后可能会输出最后遍历到的结点;4.如果遍历到孩子为空的情况,接...原创 2019-09-05 20:48:11 · 86 阅读 · 0 评论 -
PAT 甲级 1109 Group Photo (25 分)
思路:1.用结构体存储每一个人的身高和名字,并重载大于号;2.用set存储每个人;3.利用字符串,奇数个就加左边,偶数个就加到右边,来实现站位顺序;4.除了最后一排的数量是n/k+n%k,其它都是n/k;代码:#include<iostream>#include<set>#include<string>using namespace std;...原创 2019-09-05 20:41:35 · 123 阅读 · 0 评论 -
PAT 甲级 1108 Finding Average (20 分)
思路:1.不是数字的位置只能在第一个且为负号,或者在字符串的倒数第一、二、三位置、或者不存在;2.上面的方法也可以用sscanf或者sprintf进行判定;3.数字要在规定区间内;4.按.2f输出就好了;代码:#include<iostream>#include<string>#include<cctype>using namespace st...原创 2019-09-05 20:37:56 · 136 阅读 · 0 评论 -
PAT 甲级 1115 Counting Nodes in a BST (30 分)
思路:1.用指针建树,因为树中有重复元素,所以不可以用映射;2.建树时记录每个结点的level,在new node()时,相应的mp[level]加一;3.用逆序的map,最后输出第一个元素和第二个元素和它们的和就好了;代码:#include<iostream>#include<map>using namespace std;struct node{ in...原创 2019-09-05 16:49:43 · 149 阅读 · 0 评论 -
PAT 甲级 1114 Family Property (25 分)
思路:1.用结构体将每一个人的信息存储下来,同时将每一个人的家人也作为一个人存储下来,为了使用这些人的家人部分;2.设立map标记某一个人是否被遍历过、是否在输入给定的人里(每行输入的第一个id)(为了确定遍历到这个人时要不要加上他的资产);3.将人以id为key存入map,从头开始遍历,可以解决家族中输出id最小的问题;4.设立家族结构体,储存相应变量,并编写相应排序规则,每遍历完一个家...原创 2019-09-05 11:19:37 · 123 阅读 · 0 评论 -
PAT 甲级 1113 Integer Set Partition (25 分)
如此简单的一道题,刚开始被我想错了,错写了一堆东西…真担心过几天考试啊…叹气…思路:1.用数组存储,然后升序排序;2.分为[0,n/2)和[n/2,n-1]两个子集就好了;3.奇数个数第一个输出1,偶数个数第一个输出0;代码:#include<iostream>#include<algorithm>#include<vector>using n...原创 2019-09-04 21:55:57 · 150 阅读 · 0 评论 -
PAT 甲级 1112 Stucked Keyboard (20 分)
这种20分的题居然还磕绊了不少时间,还有四天考试了真慌啊…思路:1.提前分别将k个0-9、a-z、下划线组成的字符串存到以对应字符为key值的map里;2.用字符串存储屏幕上的字符串,然后挨个遍历;3.设置一个map,存储这个键有没有被卡住,默认为false;4.每遍历到一个字符,如果以这个字符串开始的k个字符不等于k个这个字符,那么这个键就没有被卡住;若等于k个这个字符,那i+=k-1...原创 2019-09-04 15:03:07 · 175 阅读 · 0 评论 -
PAT 甲级 1119 Pre- and Post-order Traversals (30 分)
思路:1.用两个vector存储前根和后根遍历序列,同时用map存储每一个value在后根遍历序列中的位置;2.前序和后序不能确定唯一一颗二叉树的原因是,如果当前结点只有一个孩子,它不能分清这是左孩子还是右孩子;3.每次递归,前序的第一个和后序的最后一个就是当前结点,前序的第二个结点是当前结点的孩子结点,查询前序第二个结点在后序中的位置,若在倒数第二个位置,那当前结点只有一个孩子,设置标志“...原创 2019-09-03 17:02:24 · 96 阅读 · 0 评论 -
PAT 甲级 1118 Birds in Forest (25 分)
之前看柳婼学姐PAT经验集,觉得她讲输出的时候一定要注意,特别是大小写,我还不以为意,觉得这个没什么,今天就踩雷了…一直答案错误,还好最后看出来大小写的问题。所以大家在刷题和考试的时候千万注意啊…思路:1.由于鸟的index是连续的,因此我们记录遇到的最大的编号,就是鸟的数量;2.使用并查集算法,遍历数组,记录最后编号和自己一样的鸟的数量,即树的数量;3.每遇到两个鸟,去寻找他们的上级,直...原创 2019-09-02 20:15:26 · 262 阅读 · 0 评论 -
PAT 甲级 1015 Reversible Primes (20 分)
这个20分的题居然困了我好久,主要是没什么进制互换和倒序的经验,我自作聪明用了int来存储任意进制的数,到最后才发现二进制数或者低进制数可能会超出范围导致最后一个测试点过不了。顺便吐槽一句c++的字符数组、字符指针和字符串是真难用。。。代码:#include<iostream>#include<cmath>#include<vector>using n...原创 2019-08-12 22:29:30 · 277 阅读 · 0 评论 -
PAT 甲级 1132 Cut Integer (20 分)
思路:1.字符串求子串、转整数;2.分母上的数不能为0;代码:#include<iostream>#include<string>using namespace std;int main(){ int n; cin>>n; string s; for(int i=0;i<n;i++){ cin>>s; int a=...原创 2019-08-16 11:22:26 · 149 阅读 · 0 评论 -
PAT 甲级 1141 PAT Ranking of Institutions (25 分)
思路:1.以校名为索引存储相关信息;2.定义符合题意的sort()排序;代码:#include<iostream>#include<unordered_map>#include<string>#include<cctype>#include<vector>#include<algorithm>using n...原创 2019-08-12 14:57:37 · 149 阅读 · 0 评论 -
PAT 甲级 1151 LCA in a Binary Tree (30 分)
PAT 甲级 1151 LCA in a Binary Tree思路:代码:太惭愧了,这题暴力解的,玩不来各个大佬的lca算法。思路:1.将中根先根序列存储,然后用递归分治分别求出每个key的父结点,同时记录结点层次;2.用全局变量存储中根先根序列,然后以下标范围来限定子树范围,我之前在每次递归时又定义两个vector来复制树的一个区间,以起到遍历子树的效果,结果后三个内存超了;3.对于...原创 2019-08-10 14:13:12 · 171 阅读 · 0 评论 -
PAT 甲级 1136 A Delayed Palindrome (20 分)
思路:1.用数组保存这个超级大的数字,每个位置存一位;2.用循环每一位相加,进位就做标记,下一次加的时候多+1;3.最后循环出来检查标记位,如果有标记则最高位再放一个1;代码:#include<iostream>#include<vector>#include<algorithm>using namespace std;vector<in...原创 2019-08-14 13:49:50 · 120 阅读 · 0 评论 -
PAT 甲级 1143 Lowest Common Ancestor (30 分)
自己真蠢,其实这题很简单,不需要建树,直接遍历preorder list就好了;思路:这是建树的笨方法:建树,先判断在不在树中,不在的话按要求输出;在的话按大小查找,找到的首个值介于需要查找的两个结点值之间的结点即lca;自己真是蠢啊,用先根遍历序列去建树,然后去先根遍历找lca;简单思路的就是之间在先根序列中找第一个值介于中间的点即lca;代码:#include<iostrea...原创 2019-08-13 21:01:08 · 231 阅读 · 0 评论 -
PAT 甲级 1135 Is It A Red-Black Tree (30 分)
思路:1.根据先根遍历序列和二叉寻找树这两个性质构造一颗二叉树:以所给值的绝对值为key,同时以key值为键用map存储颜色;2.判断根结点颜色;3.在构造二叉树时判断,若结点为红色,孩子结点有没有为红色的;4.遍历二叉树,递归计算以每个结点为根节点的树的所有路径黑色结点个数(注意是每个结点,不只是整棵树的根节点);代码:#include<iostream>#includ...原创 2019-08-18 20:19:35 · 128 阅读 · 0 评论 -
PAT 甲级 1142 Maximal Clique (25 分)
思路:1.用map的映射关系存储邻接矩阵;2.先遍历所有给的点,比较是否邻接,以此判断是不是团;3.若是团,则遍历所有团中结点,若结点的相邻节点数不等于k-1,则删去团中k-1个结点,将剩下的结点与团中结点比较,比较是否都相邻;代码:#include<iostream>#include<vector>#include<unordered_set>...原创 2019-08-13 13:17:33 · 139 阅读 · 0 评论 -
PAT 甲级 1149 Dangerous Goods Packaging
PAT 甲级 1149 Dangerous Goods Packaging思路:代码:思路:1.将所有互斥物品存放于map中,然后依据货物清单逐一遍历每件物品的互斥物品是否在清单中;2.货物清单可用大数组存放,以空间换时间,否则可能超时。代码:#include<iostream>#include<unordered_map>#include<vector...原创 2019-08-08 16:54:37 · 160 阅读 · 0 评论