PAT甲级
小海同学@
消灭恐惧最好的办法就是面对恐惧
展开
-
PAT甲级1034 Head of a Gang (C++)
PAT 1034 Head of a Gang原创 2022-05-15 10:53:23 · 222 阅读 · 0 评论 -
PAT甲级1028 List Sorting(C++)
题意:给出人数 第几列排序 排序有三种情况 1:给ID排序 2:给姓名排序 如果一样则看ID 3:给分数排序,如果分数一样 看ID 题解:本题难度不大,主要是要对字符串的排序要熟悉,不能只会数字排序(确实也没考虑到字符串也能直接排序),对sort的功能了解的也更多了。 详细代码样例: #include <bits/stdc++.h> using namespace std; struct student{ string ID; int Grade; string Name; }; bool原创 2022-05-15 10:48:18 · 160 阅读 · 0 评论 -
PAT甲级1030 Travel Plan (C++)
题意:这道题和之前1003的城市找路线问题非常相似,几乎是一模一样,给出城市 路数 起点 终点 后面跟着 城市1 城市2 路长 花费 然后求出起点到终点的路径,距离,花费其中有几点就是要注意,现在求得不是路径多少,最短路径的那一条具体路线,如果有多条路线就找花费最少的路线。 题解: 整道题一个用到深搜,一个用到回溯,深搜用来找最短路径,回溯用来找详细路径,难度要比1003的更大一点。 详细代码样例: #include <bits/stdc++.h> using namespace std; //原创 2022-05-15 10:40:55 · 259 阅读 · 0 评论 -
PAT甲级1026 Table Tennis (C++)
题意:就是给出来排队的人数 接下来n行就是 来的时间,玩的时间,以及是否会会员,咱们需要做的就是求出达到的时间和开始服务的时间以及等待的时间 这个等待的时间四舍五入即可 整个流程就是来排队,然后有会员和非会员,都要进行排队,只是会员可以优先使用会员桌,但是还是和非会员一样排队,所有的桌子都能用 题解:整一个就是排队问题,由于有会员和非会员之分,所以分成两个队伍,一个会员队,一个总队,两个队伍一起开始排队,一起开始释放即可 具体流程代码会非常详细。 详细代码样例: #include <bits/stdc原创 2022-05-15 10:34:19 · 227 阅读 · 0 评论 -
PAT甲级1020 Battle Over Cities (C++)
题意:第一行几棵树,下面一行就是后序序列,在后面一行是中序序列。 题解:这是一道数据结构题,基本上就是可以通过后序和中序来确定层序,基本思路就是根据后序确定根节点,然后根据中序的根节点,分成左子树和右子树,然后不断的回溯直到左子树和右子树不能再分位置,所得到的就是排序好的树,然后再通过输出遍历的方式得到层序,这个可以用到树的输出,一般用的是队列。 详细代码样例: #include <bits/stdc++.h> using namespace std; //建树 //先建立树的节点 int N;原创 2022-05-05 23:00:59 · 132 阅读 · 2 评论 -
PAT甲级1022 Digital Library (C++)
题意:给出几行 题解:该题本质是连通图问题,也就是去掉一个节点后,还剩下几个连通图,则需要修连通图个数-1条公路。 详细代码样例: #include <bits/stdc++.h> using namespace std; int N,M,K; vector <int> cityneibor[1001]; int visited [1001]; int lost; void dfs(int cur){ visited[cur] = 1; for(int i:cityneibor[原创 2022-05-05 22:51:43 · 102 阅读 · 0 评论 -
PAT甲级1013 Battle Over Cities (C++)
题意:第一行给出城市数量N,公路数量M,要检查的城市数量K。 题解:该题本质是连通图问题,也就是去掉一个节点后,还剩下几个连通图,则需要修连通图个数-1条公路。 详细代码样例: #include <bits/stdc++.h> using namespace std; int N,M,K; vector <int> cityneibor[1001]; int visited [1001]; int lost; void dfs(int cur){ visited[cur] = 1;原创 2022-03-03 21:12:11 · 432 阅读 · 0 评论 -
PAT甲级1014 Waiting in Line (C++)
题意:第一行给出窗口数量N,黄线内最大容量M,顾客的数量为K,查询顾客的编号数量为Q。 解析来K个数字表示顾客所花费的时间 在接下来Q行表示顾客离开的时间为多少。 题解:建立顾客结构体,利用队列进行先进先出。根据时间进行循环,完成三步,在服务开始之前,进入黄线,进入黄线之前,判断是否有人离开。因此分成三个部分,分别是: 1.判断是否有人离开,离开时间与循环的时间相等,此时离队。 2.判断黄线内是否缺人,缺任则在黄线外的顾客入队。 3.进行服务,赋值当前时间+服务所需的时间。 详细代码样例: //输入四个数字原创 2022-03-03 20:39:59 · 372 阅读 · 0 评论 -
PAT甲级1004 Counting Leaves (C++)
题意:第一行给出总结点数N,有叶子节点数M,接下来就是M行,给出一个节点,后面是在该节点的总叶子数,分别给出叶子编号。求每一层没有节点的数量。 题解:深搜,从当前节点和当前层数开始遍历,遍历每一个节点是否有叶子节点,有,那么就继续深搜,没有就该层+1。 详细代码样例: //整体题意,给出总节点数 N,叶子节点数 M //输出是每一层 没有叶子节点的数量 //解决思路仍然是深搜 #include <bits/stdc++.h> using namespace std; int maxleve原创 2022-03-03 00:02:16 · 403 阅读 · 0 评论 -
PAT甲级1039 Course List for Student (C++)
题意:第一行给出课表有的人数N,总课程数K。 下一行就是K组,每一组包含学生编号,该学生的课程总数,最后给出十一个课程,求每一个课程的人数及编号。 题解:建立哈希数组,利用map进行以ID为下标遍历。 详细代码样例: #include <bits/stdc++.h> using namespace std; int main(){ int N,K; unordered_map <string,set<int>> MAP;//下标为string 用课程为下标查询学生ID原创 2022-03-02 23:11:07 · 95 阅读 · 0 评论 -
PAT甲级1012 The Best Rank (C++)
题意:第一行给出N,K分别是几个人,测试几个人,接下来N行为学生ID,C成绩,M成绩,E成绩。K行测试的学生ID,不存在则输出N/A。 题解:建立学生结构体,包含学生ID、数组grade保存分数,rank数组保存后续的排名。利用结构体的快速排序,将排名赋值给rank。最后用map进行以ID为下标遍历。 详细代码样例: #include <bits/stdc++.h> using namespace std; struct student{ string ID; int grade[4],ra原创 2022-03-02 19:29:24 · 369 阅读 · 0 评论 -
PAT甲级1022 Digital Library (C++)
题意:第一行给出N本书 接下来六行分别是编号 书名 作者 关键词 出版社 出版年月 然后给出测试M行,每一行一个数字:关键词,通过关键词搜索这本书的ID。 题解:通过建立以下标为关键字的哈希存储遍历,难点在于存储数据以及哈希的遍历,还有就是限制关键词在哪里查找,也就是如果第三行关键词有作者名,而查询是在第二行作者名中查找,则不能在第三行查找。 详细代码样例: #include<bits/stdc++.h> using namespace std; int main(){ unordered_m原创 2022-03-02 18:31:31 · 457 阅读 · 0 评论 -
PAT甲级1021 Deepest Root (C++)
本题翻译: 题目给第一行,输入多少对结点,后面就是输入节点1 2,这两个是连在一起的。求最深的节点。 本题思路: 利用深度搜索搜三次,第一次是判断是不是树,第二次判断随机最深的一个节点,第三次就是利用该节点,求另一端最远的节点。 详细代码样例: #include <bits/stdc++.h> using namespace std; int N; int visited[100001]; vector <int> v[100001]; int maxdis = 0; vector原创 2022-03-02 00:07:12 · 109 阅读 · 0 评论 -
PAT甲级1018 Public Bike Management (C++)
本题翻译: 题目给出四个数字,分别是Cmax(每站最大的自行车容量),N(总站数),Sp(问题站),M(路数) 第二行是站点的自行车数量 接下来的N行是站点x,站点y,两个站点的距离。 为了到达问题站,将问题占的自行车数量调整为Cmax/2,并且把顺路的站点自行车数量都调整为Cmax/2,问要从0号拿多少自行车,或者带回多少自行车。最短距离优先于拿自行车的数量优先于带回自行车的数量。也就是说,距离越短越好,距离相同的情况下,拿自行车数量越好越好,如果还是一样,那就带回的自行车数量越少越好。 本题思路: 利用原创 2022-02-28 01:18:58 · 216 阅读 · 0 评论 -
PAT甲级1003 Emergency (C++)
本题翻译: 题目给出四个数字,分别是N(多少城市)、M(有几条路)、C1(初始城市)、C2(救援城市) 第二行是给出五个城市分别有多少救援人员。 接下来的N行是城市x,城市y,两个城市的距离。 最后求到该城市的最短距离有几条路,在最短距离的情况下最多的救援人员是多少? 本题思路: 利用深度搜索进行图的遍历,寻找最短路径,顺带把救援人员进行统计。 详细代码样例: #include <bits/stdc++.h> using namespace std; int N,M,C1,C2; int num原创 2022-02-25 23:20:11 · 416 阅读 · 0 评论 -
PAT甲级1024 Palindromic Number (Python)
本题翻译: 题目给出两个数字,一个是N,一个是K,判断N是否为回文数字,如果不是,将N转换成回文数字后加N,再判断是否为回文数字,循环K次,直到看见回文数字为止,如果在K次循环之内没有看见回文数字,则输出循环了K次的数字,其中个位数默认是回文数字。 本题思路: 写两个函数,一个是判断回文函数,一个是将数字转换成回文数字。 注意事项: 本题一直不能通过,有好几个细节问题,最开始一测,只过了几个测试点,后来发现细节很多。 1.个位数是否判断为回文数字。 2.循环次数为0是否能输出。 3.是否确保循环次数和回文次原创 2022-02-03 12:50:03 · 1024 阅读 · 0 评论 -
PAT甲级1019 General Palindromic Number (python)
本题翻译: 给出两个数,一个十进制,一个进制转换数,将该十进制转换成某进制即可,输出该进制下的数是否为回文数,如果是则Yes,不是则No 本题思路: 本题基本考察回文数字和各类进制的转换,在之前的java刷题当中有写过进制的转换,难度不大,回文函数也不大,但仍然不明白为嘛代码就是只能通过一部分,呜呜呜~ 瑕疵代码: #判断回文数字函数 def palindromic(m): a = list(reversed(m)) z = "" for i in a: z+=i原创 2022-01-30 13:49:12 · 1280 阅读 · 0 评论 -
PAT甲级1022 Digital Library (python)
本题翻译: 数字图书馆,很多书,需要做个分类,给出第一个数字,共计多少本书,每本书有六条信息,分别是ID、书名、作者、关键词、出版者、出版年份。再给出查找信息,进行书本遍历查找即可。 本题思路: 本题基本是通过二维数组,将数据存储,再遍历查找,最后对查找的ID进行排序即可,注意,需要锁定给出的第几条信息进行遍历,可能查找的信息是第三条,但是第二条也满足,这样的书本不算查找成功的书本。 未完全成功的代码: #甲级1022 #多少本书 m = int(input()) a = [[] for i in rang原创 2022-01-30 13:41:18 · 784 阅读 · 0 评论 -
PAT甲级1013 Battle Over Cities (python)
思路 1013 Battle Over Cities (25 分) 题目就不抄了,思路翻译以一下就是: 给出若干个城市n,以及哪些城市之间有路,题目要求解决的是:选取其中k个城市,其中一个被占领时,与之相关的路全部报废,问重新连接这些k-1个城市,至少要修几条路。 从样例基本可以看出,这个图的问题,把图转为矩阵,解题思路就是回溯,有想法,但是代码只能部分通过: 想法思路: 其中3被占领与2基本一致 python代码编写 #甲级1013 n = 0 visit = [[False for i in ran原创 2022-01-29 13:29:31 · 511 阅读 · 1 评论