
PAT
delicious__z
这个作者很懒,什么都没留下…
展开
-
PAT(甲级)2019年冬季考试
A题 Good in C (20分)When your interviewer asks you to write “Hello World” using C, can you do as the following figure shows?Input Specification:Each input file contains one test case. For each case, the first part gives the 26 capital English letters A-Z原创 2020-07-23 11:47:54 · 694 阅读 · 1 评论 -
PAT---A1115 Counting Nodes in a BST (30分)
题意给出n个整数依次插入BST,求最后两层的节点数并按照要求输出。‘思路构造BST,然后遍历一遍得到各层的节点数。Sample Input:925 30 42 16 20 20 35 -5 28Sample Output:2 + 4 = 6#include "bits/stdc++.h"using namespace std;struct Node{ int v; Node *l{nullptr}; Node *r{nullptr};};Node* i原创 2020-07-21 16:16:10 · 111 阅读 · 0 评论 -
PAT---A1114 Family Property (25分)
题意给出n行信息,每行信息包括id,父母id,孩子id和自己拥有的estate和area。统计每个家族的平均estate和平均area,按照平均area降序输出(重复则按照id升序)。将家族中的id最小成员的id作为家族的id。思路并查集。要注意的是最小id优先作为首领的处理。Sample Input:106666 5551 5552 1 7777 1 1001234 5678 9012 1 0002 2 3008888 -1 -1 0 1 10002468 0001 0004 1 22原创 2020-07-21 15:43:17 · 130 阅读 · 0 评论 -
PAT---A1112 Stucked Keyboard (20分)
题意On a broken keyboard, some of the keys are always stucked. So when you type some sentences, the characters corresponding to those keys will appear repeatedly on screen for k times.Now given a resulting string on screen, you are supposed to list all the原创 2020-07-21 10:58:43 · 137 阅读 · 0 评论 -
PAT---A1119 Pre- and Post-order Traversals (30分)
题意给定二叉树的先序和后序遍历,要求判断二叉树是否唯一,并输出任意一种的中序遍历。思路仿照先序+中序的思路建树,但是由于不能确定左右子树的位置,所以对左子树的长度进行枚举,如果有两种以上情况的长度都合适,说明不唯一,取其中一种继续下去即可。Sample Input1:71 2 3 4 6 7 52 6 7 4 5 3 1Sample Output1:Yes2 1 6 4 7 3 5Sample Input2:41 2 3 42 4 3 1Sample Output2:N原创 2020-07-20 22:51:40 · 110 阅读 · 0 评论 -
PAT---A1118 Birds in Forest (25分)
题意给出n张照片,每张照片有若干个鸟,假设一张照片中的鸟都在一棵树上,要求输出树的数目和鸟的总数。并给出q个问题,每个问题询问两只鸟是否在一棵树上。思路典型并查集。Sample Input:43 10 1 22 3 44 1 5 7 83 9 6 4210 53 7Sample Output:2 10YesNo#include "bits/stdc++.h"using namespace std;const int N = 10005;int father[N]原创 2020-07-20 18:21:27 · 101 阅读 · 0 评论 -
PAT---A1122 Hamiltonian Cycle
题意给出一个无向图, n个顶点(顶点id从1开始), m条边.输入k组顶点集, 判断是否为Hamiltonian cycle.Hamiltonian cycle: a simple cycle that contains every vertex in a graph.思路判断Hamiltonian cycle:该顶点集一定包含n+1个顶点首尾一定相等连通性检查Sample Input:6 106 23 41 52 53 14 11 66 31 24 567原创 2020-07-20 14:48:23 · 176 阅读 · 0 评论 -
PAT---A1127 ZigZagging on a Tree (30分)
题意给定二叉树的后序和中序遍历,要求输出特定的层次遍历,即间隔一层反转.思路主要是如何实现间隔一层反转.方法一:下一层的节点一定在遍历完上一层之后才遍历到, 可以根据这个特点进行处理: 设置一个buffer, 这个buffer仅仅存储该层的节点, 遍历到不属于该层的节点的时候处理该层: 如果层数为奇数就reverse, 然后输出 buffer的全部节点并清空buffer, 继续遍历.方法二:将节点分层存储起来, 统一处理.(方法二更好.)Sample Input:812 11 20 17原创 2020-07-20 11:39:20 · 100 阅读 · 0 评论 -
PAT---A1124 Raffle for Weibo Followers (20分)
题意给出m条评论,开始抽奖,中奖id从s开始,id从1开始,间隔n条评论,中过奖的不能再次中奖。如果没有人中奖,输出 Keep going…思路此题不难,但是如果不充分理解题意,处理不好会变得很麻烦。处理中间id从s开始:先输入s条,忽略处理间隔n个,且中过奖的不能再次中奖:设置一个计数器,加map判重。Sample Input1:9 3 2Imgonnawin!PickMePickMeMeMeeeLookHereImgonnawin!TryAgainAgainTryAga原创 2020-07-19 21:29:20 · 122 阅读 · 0 评论 -
PAT---A1131 Subway Map (30分)
题意给出n条线路,输入k组起点,终点,要求输出最优路径的信息。最优路径:经过的站点最少,若站点数量相同则选择转乘最少的。思路看到题目就知道是比较繁琐的一题。最优路径选取:dfs 选择最优路径,有两种方法:一种是记录所有的路径,最后再遍历选出最优的路径;一种是直接选取,这里我选择的是第二种方法。输出最优路径信息是最繁琐的过程。Sample Input:47 1001 3212 1003 1204 1005 1306 77979 9988 2333 1204 2006 2005 2004原创 2020-07-19 16:27:33 · 113 阅读 · 0 评论 -
PAT---A1129 Recommendation System (25分)
题意输入n个用户搜索的商品,每输入一个商品,输出推荐的不超过k个商品,推荐的算法是用户主动搜索次数多的排在前面,如果搜索次数相同则按照商品的id 升序排列。思路明显需要动态排序,数据结构用set,输入一个就重新将商品插入到set中,达到动态排序的效果。Sample Input:12 33 5 7 5 5 3 2 1 8 3 8 12Sample Output:5: 37: 3 55: 3 5 75: 5 3 73: 5 3 72: 5 3 71: 5 3 28: 5 3 1原创 2020-07-19 14:30:05 · 132 阅读 · 0 评论 -
PAT---A1139 First Contact (30分)
题意A暗恋B,让朋友C传话给B的朋友D,D再传话给B。A.gender == C.genderB.gendre == D.genderC是A的朋友,不能是B本身D是B的朋友,不能是A本身这样A暗恋B,需要两个朋友才能传话给B,找出所有对这样的朋友,从小到大输出。思路很明显遍历一下就能得出答案,注意到从小到大输出,map有排序功能,所以就用map。注意输入要用string 输入来判断性别,否则输入0无法判断性别。Sample Input:10 18-2001 1001-2002 -原创 2020-07-18 20:58:17 · 268 阅读 · 0 评论 -
PAT --- A1142 Maximal Clique (25分)
题意给出一个无向图,给出m组顶点集,判断。思路cnt[id]非常关键,否则后面遍历cnt对该组进行判定的时候,cnt可能会不包含in_vertices中的某些key,而算法正确的前提是cnt要包含in_vertices中所有的key。#include "bits/stdc++.h"using namespace std;const int N = 210;vector<int> links[N];int main(){// freopen("input.txt","r"原创 2020-07-17 18:58:44 · 114 阅读 · 0 评论 -
PAT---A1151 LCA in a Binary Tree (30分)
题意给出一棵二叉树的中序和先序遍历,输入两个key a和b,求a和b的lca,即最近的祖先节点。思路此题参考了别人的思路。首先处理not found的情况,然后处理两个节点都在二叉树的情况。从根节点开始,如果根节点在a和b之间,说明根节点就是答案如果根节点是a和b中的一个,得到答案如果根节点在a和b的左边,则将根节点变为右子树的根节点,重复上述过程如果根节点在a和b的右边,则将根节点变为左子树的根节点,重复上述过程。用一个map来存储每个key对应的节点在中序遍历数组中的位置。然而用m原创 2020-07-16 16:21:24 · 168 阅读 · 0 评论 -
PAT---A1151 Travelling Salesman Problem (25分)
题意给出一个无向图,边权,判断TS simple cycle, TS cycle, Not a TS cycle三种情况,首先这里 “环” 定义为访问到1-n每一个节点,而且首尾相接的路径。最后输出最短的环,和路径长度。三种情况如下:TS simple cycle:简单环,除了首尾访问每个城市刚好一次TS cycle:非简单环Not a TS cycle:不是环思路理解了三种情况之后,我们发现三种情况是依次减弱的,于是按照顺序进行排除即可。Sample Input:6 106 2原创 2020-07-16 11:01:33 · 103 阅读 · 0 评论 -
PAT---A1048 Werewolf - Simple Version (20分)
题意狼人杀,给出n个玩家的断言(即认定某人是狼人或者人类),狼人总共有两个,而且恰好有1个狼和一个人类撒了谎。如果有多个答案就输出”最小“的那个。此题是20分的题,但是第一次看到的时候还是非常懵不知道如何下手,所以记录一下。思路此题其实就是简单的枚举题。枚举每一种情形,如果符合条件就是答案了。由于是多个答案选择 ”最小“的那个,就按照从小到大的顺序枚举就行了。Sample Input:5-2+3-4+5+4Sample Output:1 4#include "bits/stdc原创 2020-07-15 22:40:34 · 103 阅读 · 0 评论 -
PAT-A1149 Dangerous Goods Packaging (25分)
题意给出已知的不能放在一起的物品,然后输入几组物品,判断是否合理。思路题目没什么难的,难在时间复杂度和空间复杂度之间的权衡,任何一方面把握不好就ac不了。我觉得我的思路挺好,所以分享一下。大致思路是准备一个充分大的数组,对于每一组,物品一个一个的放进去,同时也将其不兼容的物品全部放进这个数组,一旦放入新的物品时发现这个位置已经是 1,说明这个物品不能放进去。Sample Input:6 320001 2000220003 2000420005 2000620003 2000120005原创 2020-07-15 22:32:36 · 119 阅读 · 0 评论 -
PAT----A1155
题意给出一颗完全二叉树的层次遍历,要求输出所有从根节点到叶子节点的所有路径(右子树优先),判断是否为最大堆或者最小堆。思路遍历的时候记录路径,遇到叶子节点就输出这条路径遍历二叉树,同时进行判断是否为最大堆或者最小堆#include "bits/stdc++.h"using namespace std;vector<int> temp;int a[1010];int n;void show(){ bool blank = false; for(int t:t原创 2020-07-15 17:52:52 · 113 阅读 · 0 评论 -
牛客PAT甲级练习题 1016 Counting Leaves (30)
题意给出一棵树,要求输出每一层的叶子节点的数量,叶子节点的定义为没有子节点的节点。这题不难,不过很久不写了就写个博客记录一下吧。#include "bits/stdc++.h"using namespace std;const int maxn = 110;vector<int> nodes[maxn];map<int,int> ans;int vis[maxn];void dfs(int id,int depth){ if(vis[id]) { return原创 2020-05-16 15:17:28 · 211 阅读 · 0 评论 -
PAT---- A1003 Emergency (25point(s))
题意给出每个城市的点权,图的边权,要求找出最短路径的数量,和点权之和的最大值。思路dijkstra算法寻找最短路,用num_path数组记录最短路的数量。#include"bits/stdc++.h"using namespace std;const int maxn = 510;int G[maxn][maxn]; int dis[maxn];int w[maxn]; int weight_sum[maxn];int vis[maxn]; int num_pa原创 2020-05-16 11:19:35 · 125 阅读 · 0 评论 -
牛客PAT甲级练习题 1009 Travel Plan (30)
题意考察Dijkstra算法,双重边权。思路寻找最优路径并记录(pre),最后后序遍历输出路径。#pragma GCC optimize(2)#include"bits/stdc++.h"using namespace std;const int maxn = 510;int G[maxn][maxn]; int G2[maxn][maxn];int dis[maxn]; int dis2[maxn];int vis[maxn];struct Node{原创 2020-05-15 22:11:09 · 152 阅读 · 0 评论 -
牛客PAT甲级练习题 1005 Colors in Mars (20)
题意给出3个10进制的数,转换为13进制按照规则输出。主要是进制转换这个知识点。input:15 43 71output:#123456#pragma GCC optimize(2)#include"bits/stdc++.h"using namespace std;string solve(int x) { string s; while (x) { int t = x % 13; if (t > 10) s.push_b原创 2020-05-14 21:16:23 · 191 阅读 · 0 评论 -
牛客PAT甲级练习题 1004 Tree Traversals Again (25)
题意用栈的形式给出一棵二叉树的建立的顺序,求这棵二叉树的后序遍历观察二叉树可以发现,先序遍历就是push的顺序,中序遍历就是pop的顺序。注意点一开始以为是很常规的先序和中序建树,然后后序遍历就行。但是提交之后发现没有通过,分析原因是因为当有重复的值的时候,中序遍历的数组无法分辨哪一个是根节点。解决:通过指针。6Push 1Push 2Push 3PopPopPush 4PopPopPush 5Push 6PopPopoutput3 4 2 6 5 1#pragma原创 2020-05-14 20:07:29 · 224 阅读 · 0 评论 -
A1022 Digital Library (30point(s))
A1022 Digital Library (30point(s))题意每一本书的信息包含6行,其中第3行的信息是一些关键字keywords。包含m次查询,一共有5中查询,输出书籍id。思路把查询的信息作为索引,书籍id为值。#include"bits/stdc++.h"using namespace std;int main(){ // freopen("input.txt",...原创 2020-02-24 16:04:24 · 108 阅读 · 0 评论 -
PAT----A1026 Table Tennis (30point(s))
A1026 Table Tennis (30point(s))花了好长时间都没ac,还差第五个测试点通不过,没办法了,先放着。题意优先安排id小的桌子。注意如果vip到了,优先安排vip桌子;vip可以插队安排vip桌子,排队等待过程中如果有vip桌子空了优先安排正在等待的vip客户。思路用vis表示该用户是否已经被安排了。总结很难的模拟题。Sample input:920:...原创 2020-02-21 17:14:20 · 169 阅读 · 0 评论 -
PAT----A1025 PAT Ranking (25point(s))
A1025 PAT Ranking (25point(s))题意输入n个考场的学生信息,要求排序输出全局排名,考场排名等信息。思路考场排名可以使用数组解决。Sample Input:251234567890001 951234567890005 1001234567890003 951234567890002 771234567890004 85412345678900...原创 2020-02-20 11:45:27 · 107 阅读 · 0 评论 -
PAT----A1034 Head of a Gang (30point(s))
A1034 Head of a Gang (30point(s))图或者并查集题意寻找可疑的犯罪团伙按照字母顺序输出首领的name。可疑的犯罪团伙指在一个边权加起来大于K并且节点个数大于2的连通图。首领是边权总和最大的那个。思路首先是名字和节点对应的问题,这里用map<string,int> 解决。然后边权直接加到点权上面,判断时除以二即可。显然,也可以用并查集。总...原创 2020-02-19 16:24:12 · 143 阅读 · 0 评论 -
PAT----A1032 Sharing (25point(s))
A1032 Sharing (25point(s))题意给出两条链表并找出共同后缀,输出节点地址,如果没有则输出-1.思路建立两条链表倒着遍历。11111 22222 967890 i 0000200010 a 1234500003 g -112345 D 6789000002 n 0000322222 B 2345611111 L 0000123456 e 67890...原创 2020-02-19 15:30:19 · 114 阅读 · 0 评论 -
PAT----A1051 Pop Sequence (25point(s))
A1051 Pop Sequence (25point(s))题意给定栈的最大长度,给出k个序列,进栈的顺序是1到n,输出这个序列是否是合法的出栈序列。思路直接模拟。Sample Input:5 7 51 2 3 4 5 6 73 2 1 7 5 6 47 6 5 4 3 2 15 6 4 3 7 2 11 7 6 5 4 3 2Sample Output:YESNO...原创 2020-02-14 21:34:57 · 185 阅读 · 0 评论 -
A1056 Mice and Rice (25point(s))
A1056 Mice and Rice (25point(s))模拟。题意输入np,ng,一共np个老鼠,每轮每组ng个老鼠,如果不够就余下的为一组,每组中最肥的老鼠胜出,被淘汰的老鼠的排名相同,输出全部老鼠的排名。思路用两个链表进行操作比较直观。一个用来存放此时的所有老鼠,另一个存放本轮胜出的老鼠。总结Sample Input:11 325 18 0 46 37 3 19 22...原创 2020-02-14 16:21:12 · 99 阅读 · 0 评论 -
PAT----A1063 Set Similarity (25point(s))
A1063 Set Similarity (25point(s))题意输入n个set,k次查询,输入两个set的id,输出他们之间的相似度,相似度计算公式为 共同元素个数/它们的并集的size思路maps[v] 储存v值在的集合的id。还要一种做法是联合两个set。总结判断key是否在map中的时候一定要用count()方法,不然会插入大量无用节点,使得查找性能变差。Sample ...原创 2020-02-13 18:42:02 · 211 阅读 · 0 评论 -
PAT----A1067 Sort with Swap(0, i) (25point(s))
A1067 Sort with Swap(0, i) (25point(s))题意只能交换0和其他数字,对数组进行排序,输出交换的最小次数。思路按照规则交换即可。比如0在2这个位置,2在id位置,那么swap(a[2],a[id]),注意如果0在位置0,则随机选择一个没有在本位的数字,这个过程非常重要,如果处理不当会超时很多节点(比如从1枚举),我就在这花了很多时间,也没有想到特别好的办法...原创 2020-02-12 22:55:20 · 128 阅读 · 0 评论 -
PAT----A1066 Root of AVL Tree (25point(s))
A1066 Root of AVL Tree (25point(s))题意手写AVL,插入n个节点后输出根节点的key。思路手写AVL,一开始不会写,因为AVL早就忘了,什么LL、RR、LR、RL都不记得了。。。。参考了一下别人的博客终于把AVL写了出来(只有insert方法)。总结知识盲区,AVL要会写。先贴一下AVL:struct Node { int v{}; ...原创 2020-02-12 20:32:17 · 133 阅读 · 0 评论 -
PAT----A1072 Gas Station (30point(s))
A1072 Gas Station (30point(s))题意给出加油站、房子之间的距离,最大服务距离,要求输出最优的加油站,如果没有符合条件(全部房子在服务范围内)的加油站则输出 No Solution最优就是这个加油站到房子的距离最小的最大,到所有房子的平均距离最小,id最小,三个条件优先级逐个递减。思路Dijkstra算法,算是写得比较熟了。总结Sample Input1:...原创 2020-02-12 16:51:46 · 165 阅读 · 0 评论 -
PAT----A1071 Speech Patterns (25point(s))
A1071 Speech Patterns (25point(s))题意大小写不敏感,给出一行,输出最多的单词。思路stringstream总结stringstream的使用。Sample Input:Can1: "Can a can can a can? It can!"Sample Output:can 5`#include"bits/stdc++.h"using...原创 2020-02-12 16:45:22 · 177 阅读 · 0 评论 -
PAT----A1070 Mooncake (25point(s))
A1070 Mooncake (25point(s))题意给出N中月饼的数量和总的价格,市场需求量,求最大利润思路简单贪心。总结数量和价格都有可能是浮点型,虽然数量在样例是整形。Sample Input:3 200180 150 1007.5 7.2 4.5Sample Output:9.45#include"bits/stdc++.h"using namespa...原创 2020-02-12 16:42:42 · 145 阅读 · 0 评论 -
PAT----A1069 The Black Hole of Numbers (20point(s))
A1069 The Black Hole of Numbers (20point(s))题意如果一个数是0或者6174则这个数掉进了数字黑洞。输入一个数,按四位数的格式递减排序后的数字减去递增排序后的数字得到一个新的数,如此反复直至该数等于0或6174.思路总结Sample Input:16767Sample Output17766 - 6677 = 10899810 - 01...原创 2020-02-12 16:39:13 · 194 阅读 · 0 评论 -
A1076 Forwards on Weibo (30point(s))
A1076 Forwards on Weibo (30point(s))题意给出所有人follow的人,然后k次查询,输入用户id,粉丝会转发该用户的微博,层次最多为L层,输出最终有多少个人转发了该微博。思路千万别用dfs,dfs很难不出错。该题对图的遍历深度做了限制,一些节点可能一条路走不到,但是从另一些路径可以达到,如果用dfs的话有可能会遍历不到一些节点,因为这些节点的必经之路被堵住...原创 2020-02-12 00:38:26 · 105 阅读 · 0 评论 -
PAT----A1075 PAT Judge (25point(s))
A1075 PAT Judge (25point(s))排序题题意输入学生提交记录,一次都没有通过编译器或者一次都没有提交的考试不出现在输出里面。注意输出的所有题目,如果该学生提交过了也应该输出0,即使没有通过编译,如果学生没有提交过该题目则输出 -思路之前没有注意到如果输出的学生提交过该题目该输出0而不是 -,看起来也不太好改,所有最后只能补救一下,用一个数组存一下没通过的,最后过滤了...原创 2020-02-12 00:09:53 · 116 阅读 · 0 评论 -
PAT----A1074 Reversing Linked List (25point(s))
A1074 Reversing Linked List (25point(s))题意链表每k个元素反转。思路reverse()。总结最后总有一个测试点过不去,然后发现又被坑了,原来输入的节点有可能根本没有接上以head作为头部的链表,所以最终的链表长度可能并不是n。Sample Input:00100 6 400000 4 9999900100 1 1230968237 6 ...原创 2020-02-11 23:00:18 · 167 阅读 · 0 评论