![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT甲级
程勇uestc
电子科大
展开
-
PAT甲级 1017 Queueing at Bank (25 分) 题解
\quad初始化每个窗口开始处理的时间,将用户按照到达时间的先后顺序排好序,记得去除那些在5点以后到达的客户,服务时间超过60分钟的需要截断。接下来就是模拟人员到窗口的流动过程,当一个人到达窗口时,先选择一个最先结束的窗口去那排队,有两种情况,一种是该窗口目前无人,直接去无需等待,一种是需要等待,把等待时间加上去即可。#include<iostream>#include<a...原创 2019-08-24 20:22:02 · 1519 阅读 · 0 评论 -
PAT甲级 1058 A+B in Hogwarts (20 分) 题解
\quad英文比较难懂,不过只需要知道29个Knuts等于1个Sickle,17个Sickle等于1个Galleon即可。我把两个数都转化为多少个Knuts,加起来再转化回去这种思路做。不过需要注意Galleon数据能达到10710^7107,如果转化为Knuts将达到107∗17∗2910^7*17*29107∗17∗29,这超过了int的范围,需要用long long。#include &...原创 2019-08-26 15:53:31 · 1180 阅读 · 0 评论 -
PAT甲级1100 Mars Numbers (20 分)题解
\quad这个题稍微有点麻烦,需要分别处理数字转火星文和火星文转数字两种情况。不过数字最高两位,处理起来分别讨论即可。程序如下:#include <iostream>using namespace std;string one[13] = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep"...原创 2019-08-26 16:52:45 · 1222 阅读 · 0 评论 -
PAT甲级 1031 Hello World for U (20 分) 题解
\quad这是PAT甲级里面唯一一个打印图形的题,很简单,整个字符串分为三段n1,n2,n3,n1+n2+n3=字符串长度len+2,所以n1=n2=(len+2)/3, n3=len+2-2*n1。打印的时候逐行打印,除去最后一行,每行先打印n1的字符,再打印n2-2个空格,再打印n3的字符。最后一行打印n2即可。#include<iostream>using namespac...原创 2019-08-26 17:08:02 · 1253 阅读 · 0 评论 -
PAT甲级1006 Sign In and Sign Out (25 分)题解
\quad直接比较时间点大小即可,而时间点字符串很标准,长度都一致,直接用字符串大小比较即可完成。#include <iostream>using namespace std;int main(int argc, char const *argv[]){ int M; cin >> M; string id, in, out; string min = "...原创 2019-08-26 17:22:27 · 1244 阅读 · 0 评论 -
PAT甲级 1011 World Cup Betting (20 分) 题解
\quad这个题难在题意理解上面,说白了就是给你九个数,三个一组,找出一组中最大的数字并记录下这个数所属类别(W,T,L)。一行是一组。最后把每个组最大的数乘起来,乘0.65,再减去1,最后将所得结果乘2输出。即(max1∗max2∗max3∗0.65−1)∗2(max_1*max_2*max_3*0.65-1)*2(max1∗max2∗max3∗0.65−1)∗2。#include &...原创 2019-08-26 18:31:45 · 1378 阅读 · 0 评论 -
PAT甲级 1036 Boys vs Girls (25 分) 题解
\quad找出成绩最好的女生和成绩最差的男生,分性别比较并存储相应信息即可。#include <iostream>using namespace std;int main(int argc, char const *argv[]){ int N; cin >> N; pair<string, string> F, M; // 记录成绩最好的fe...原创 2019-08-26 18:51:50 · 1175 阅读 · 0 评论 -
PAT甲级 1012 The Best Rank (25 分) 题解
\quad这个题较为繁杂,需要将每个同学成绩分为四种情况分别排序,得到排名,取排名最低的一科作为结果输出,需要注意对用同一个同学而言,最高排名不止一科时按照学科优先级输出优先级最高的那一科。注释都在代码里面。#include <iostream>#include <vector>#include <map>#include <algorithm&...原创 2019-08-26 20:18:11 · 1376 阅读 · 0 评论 -
PAT甲级 1022 Digital Library (30 分) 题解
\quad建立5个map,用于书名,作者,关键词,出版社,出版日期与书编号之间的映射,然后输出即可。Tips:获得一句字符串后,比如“test code debug sort keywords”,如何将其按空格分成若干个单词,借用sstream头文件里面的istringstream可以很方便的完成。#include <sstream>string s, temp;vector...原创 2019-08-26 21:34:57 · 1332 阅读 · 0 评论 -
PAT甲级1025 PAT Ranking (25 分)题解
\quad这是一个排序题,分别以每个考场排序计算排名,再总的排序计算排名即可。需注意输出id时一定要是13位,如果用long long存储的话需指定输出为%013lld。#include <iostream>#include <algorithm>using namespace std;struct Stu{ long long id, score, loca...原创 2019-08-27 09:32:26 · 1265 阅读 · 0 评论 -
PAT甲级1089 Insert or Merge (25 分)题解
\quad这个题主要考察插入排序和归并排序的实现。每一步插入排序或归并排序后都看看是否与题目给定的目标序列一致u,若一致则打印当前排序类型和下一次排序结果。关于插入排序和归并排序请移步至博客,里面包含了这两种排序的代码和解释。#include <iostream>#include <vector>#include <algorithm>using na...原创 2019-08-27 16:47:56 · 1314 阅读 · 0 评论 -
PAT甲级 1027 Colors in Mars (20 分) 题解
\quad这是十进制转13进制的题,注意十进制数10,11,12用字母A,B,C表示。每个数两位,不足需要添0。#include <iostream>#include <vector>using namespace std;char c[13] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', '...原创 2019-08-26 15:35:00 · 1181 阅读 · 0 评论 -
PAT甲级1019 General Palindromic Number (20 分)题解
\quad这是一个进制转换的题,将十进制数N转化为b进制数。我们用模除的方法可以将数N拆开,将这些数压入vector中,最后翻转一下就是答案。此外还需要判断一下vector中数是否是回文。#include <iostream>#include <vector>#include <algorithm>using namespace std;int m...原创 2019-08-26 15:22:38 · 1207 阅读 · 1 评论 -
PAT甲级1042 Shuffling Machine (20 分)题解
\quad简单模拟,按照要求交换顺序。建立一个字符数组用于输出前面的字母。#include <iostream>using namespace std;int main(int argc, char const *argv[]){ char mp[5] = {'S', 'H', 'C', 'D', 'J'}; int k; cin >> k; int st...原创 2019-08-24 20:57:32 · 1224 阅读 · 0 评论 -
PAT甲级 1073 Scientific Notation (20 分) 题解
\quad这个也是科学计数法的题,属于字符串处理,跟1060 Are They Equal (25 分)处理方法类似。找出指数值和前面系数,再进行后续处理即可,程序如下:#include <iostream>#include <math.h>#include <algorithm>using namespace std;// 获得指数int ge...原创 2019-08-20 21:53:00 · 1164 阅读 · 0 评论 -
PAT甲级 1077 Kuchiguse (20 分) 题解
\quad这是一个找字符串最长公共后缀的题,依次取出每个句子最后一个字符,判断这些字符是否相同即可,若均相同则加入到结果中去,若不是则结束寻找。暴力求解,程序如下:#include <iostream>#include <vector>#include <stdio.h>#include <algorithm>using namespace...原创 2019-08-20 22:25:49 · 1274 阅读 · 0 评论 -
PAT甲级 1140 Look-and-say Sequence (20 分) 题解
\quad这个题需要读懂题意,即每一次操作为统计字符串中字符连续出现的次数,并将出现次数转化为字符串加在该字符后面,形成新的字符串。举个例子,D112111,D出现1次,接下来1连续出现2次,再接下来2出现1次,最后1连续出现3次,则结果为D1 12 21 13(为方便观看我将每个部分用空格隔开,实际字符串中无空格,即D1122113)。理解题意后解答就很容易,程序如下:#include &...原创 2019-08-20 22:55:45 · 1183 阅读 · 0 评论 -
PAT甲级 1071 Speech Patterns (25 分) 题解
\quad这个题直接用map进行词频统计,然后输出出现频率最高的单词即可,map保证了字典序。需在预处理时去掉特殊字符并分开各个单词,程序如下:#include <iostream>#include <map>using namespace std;int main(){ string s; map<string, int> mp...原创 2019-08-20 23:33:41 · 1224 阅读 · 0 评论 -
PAT甲级 1082 Read Number in Chinese (25 分) 题解
\quad这个题很难考虑周全,博主最后一个测试用例过不了。我的想法是四个四个数处理,再加上单位组合在一起,但其中有些情况没考虑到,后期会更新。程序如下:#include <iostream>using namespace std;string m[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", ...原创 2019-08-21 15:18:39 · 1271 阅读 · 0 评论 -
PAT甲级 1108 Finding Average (20 分) 题解
\quad这个题目主要分为两步,第一步是判断一个字符串是否为题目规定的合法数字,很简单,若字符串中有除数字和小数点以外的其他字符或小数点数量超过1个或小数位数超过两位则均不合法。注意若字符串最开始有’-'号则先去除。\quad第二步则为将合法的字符串转化为浮点数,这里可以自己写一个这样的函数,不过c++提供了sscanf来帮助我们把字符串转化为浮点数,整数等我们需要的数据类型。我在博客中用几行...原创 2019-08-21 15:55:34 · 1268 阅读 · 0 评论 -
PAT甲级 1002 A+B for Polynomials (25 分) 题解
\quad模拟多项式加法,把幂次相同的系数加起来,最后将那些系数不为0的系数及幂次输出即可。程序如下:#include <iostream>#include <stdio.h>#include <set>using namespace std;int main(int argc, char const *argv[]){ float coef[...原创 2019-08-21 16:37:18 · 1698 阅读 · 0 评论 -
PAT甲级 1008 Elevator (20 分) 题解
\quad模拟电梯运行状态即可,程序如下:#include <iostream>#include <vector>using namespace std;int main(int argc, char const *argv[]){ vector<int> a; int temp; cin >> temp; while(cin &...原创 2019-08-21 16:52:36 · 1256 阅读 · 0 评论 -
PAT甲级 1009 Product of Polynomials (25 分) 题解
\quad模拟多项式乘法,很简单,程序如下:#include <iostream>using namespace std;int main(){ float coef[2001]={0}, a[1001]={0}, b[1001]={0}; int num1, num2; int exp; float temp; scanf("%d", &num1); ...原创 2019-08-21 20:25:39 · 1305 阅读 · 0 评论 -
PAT甲级1098 Insertion or Heap Sort (25 分)题解
\quad插入排序和堆排序,排序算法的详解请移步博客#include <iostream>#include <vector>#include <algorithm>using namespace std;void output(vector<int> &a){ for (int i = 1; i < a.size();...原创 2019-08-27 17:34:36 · 1276 阅读 · 0 评论 -
PAT甲级1101 Quick Sort (25 分)题解
\quad这是一道逻辑题,给了快排的背景。题目大意是给你一个数字序列,找出这个序列里面有多少个数满足两个条件:它左边的数都小于它它右边的数都大于它\quad我们可以暴力求解,时间复杂度为O(n2)O(n^2)O(n2),肯定会超时。正解是将序列存入两个数组a和b,对a排序,比如a={1,2,3,4,5},b={1,3,2,4,5},那么遍历b,若满足下列三个条件则该元素为正确解答的一部...原创 2019-08-28 09:32:39 · 1257 阅读 · 0 评论 -
PAT甲级1013 Battle Over Cities (25 分)题解
\quad这个题目在于求图连通分量个数,我们从任一顶点开始对图进行dfs并记录哪些点被访问,在没有被访问过的点中继续选出任一顶点开始dfs,知道所有点都被访问,进行dfs的次数即为图连通分量个数。题目难点在于在某个点被去除的时候如何进行dfs,很简单,若dfs遍历到需要被去除的那个点我们就直接return掉,表示这条路走不通即可。#include <iostream>#inclu...原创 2019-09-02 18:04:30 · 1498 阅读 · 0 评论 -
PAT甲级1021 Deepest Root (25 分)题解
\quad这个题暴力也可以过,我试过枚举每一个点开始进行dfs,记录从这个点开始到其他节点的最大深度和对应的节点,记录下来,相互比较得到答案,时间需要1000ms,题目给的限制是2000ms,完全够。\quad正确解法是从树任一点a开始遍历,记录下距离a最远的顶点集合res1,再从res1中任选一个顶点开始第二次遍历,记录下距离该顶点最远的顶点集合res2,答案就是res1和res2中顶点去重...原创 2019-09-02 18:17:31 · 1350 阅读 · 0 评论 -
PAT甲级1034 Head of a Gang (30 分)题解
\quad这个题虽然只是图的遍历问题,但写程序要求较高,几点需要注意给出的人员姓名不是数字是字符串,需要建立姓名到索引和索引到姓名的映射,方便建图和后续处理需要记录每个人通话总时间,团队通话总时间就是该团队内所有人通话时间和的一半1000条通话记录最多可能有2000人,故需要开辟大于2000的空间,不然有个测试点会显示段错误#include <iostream>#inc...原创 2019-09-02 18:25:51 · 1422 阅读 · 0 评论 -
PAT甲级1076 Forwards on Weibo (30 分)题解
\quad这个一个标准的图BFS的过程,从图中给定的一个顶点u开始,记录与u距离(层数)不超过L的顶点个数,用队列模拟BFS即可。#include <iostream>#include <vector>#include <queue>#include <cstring>using namespace std;const int max...原创 2019-09-02 18:30:26 · 1297 阅读 · 0 评论 -
PAT甲级1003 Emergency (25 分)题解
\quad这是一个最短路的题,但要求多了一些,要求我们统计最短路条数,若有多条最短路,需要输出能获得营救队伍最多的值。故需要我们在最忧子结构里面更新两个变量。我用num[v]表示起点s到点v最短路径的条数,res[v]表示起点s到v点所能得到的最多队伍数,故在初始化时候num[s]=1,res[s]=a[s],a[s]表示s点营救队伍数量。最优子结构如下:if(dis[v]>dis[u]...原创 2019-09-02 20:29:11 · 1674 阅读 · 0 评论 -
PAT甲级 1018 Public Bike Management (30 分) 题解
\quad这个题目的是要我们能记录所有的最短路径,在这些路径中选择符合题目的那一种输出。我用vector<int> pre[maxn]数组记录符合最短路时节点的前驱节点,用Dijistra获得这个数组。最后用DFS对pre数组进行深搜,找出所有的最短路径来计算需要从中心拿走的自行车数量和需要带回中心的数量,比较输出在从中心带出自行车数量最少的前提下带回中心数量最少的那一种解答,记录此...原创 2019-09-03 17:34:27 · 1349 阅读 · 0 评论 -
PAT甲级1030 Travel Plan (30 分)题解
\quad这个题是一道最短路题,跟PAT甲级1003 Emergency (25 分)题解很像,即在求最短路的前提下,若有多条最短路,输出花费最少的一条。PAT最爱考这种题,因为花费最少满足最优子结构,我们可以直接在Dijistra中进行更新。程序如下:#include <iostream>#include <vector>#include <map>...原创 2019-09-03 18:08:07 · 1265 阅读 · 0 评论 -
PAT甲级1087 All Roads Lead to Rome (30 分)题解
\quad这个题需要考虑很多因素,第一要求是找出花费最少的路,同时统计这些路的条数;第二要求是在花费相同情况下找出happy值最高的路,第三要求是在花费和happy值都相同的情况下找出平均happy值最高的路,即经过最少的站点。故需要在子结构中层层判断并更新相应的数值。题目还要求我们输出这条路的路径,故需要一个数组path保存当前节点是由哪一个节点过来的。对了,我们还需要建立从名称到数字的映射和...原创 2019-09-04 20:11:51 · 1728 阅读 · 0 评论 -
PAT甲级1111 Online Map (30 分)题解
\quad这个题较为繁杂,分为两部分,第一部分是以最短路径为第一标尺,时间花费为第二标尺记录路径和最短距离。第二部分以最少时间花费为第一标尺,经过站点数目最少为第二标尺记录路径和最短时间。我将路径保存在stack中,这样分别计算出两部分路径,判断是否一样再按照格式输出即可。题目很常规就是看起来比较复杂,我就直接将两部分分开写,其实可以合成一个的,但是太懒了就不合并了,代码如下:#include...原创 2019-09-04 21:04:44 · 1578 阅读 · 0 评论 -
PAT图论刷题总结
\quadPAT图论是一大考点,主要集中在图遍历(DFS,BFS,连通分量)和最短路两个部分,还有一些图的新定义题(欧拉回路,哈密尔顿圈之类的),这类题很简单。但图最短路有些题较为复杂,需要较强的编码功底。1、图遍历和连通分量编号标题题解难度等级备注1013Battle Over Cities (25)C++题解2图连通分量计数1021Deepest ...原创 2019-09-04 21:53:05 · 1388 阅读 · 0 评论 -
PAT甲级1130 Infix Expression题解
\quad这是一个求中缀表达式的题,用到的就是二叉树的中序遍历,即从根节点开始进行中序遍历,并打印出每个节点的值。但我们要加上额外的括号,括号并不是都要加,比如某个节点为叶子节点就不需要加,该节点是根节点也不需要加,其他情况都要加上括号。#include <iostream>using namespace std;struct TreeNode{ string s; int...原创 2019-09-01 17:01:32 · 1204 阅读 · 0 评论 -
PAT甲级1013 Battle Over Cities (25 分)题解
\quad这个题意思是求图中去除一个点后连通分量是多少。我们暴力遍历,对于每一次失去的点q,在dfs遍历过程中遇到这个点就返回,统计图的连通分量个数。设断开一个点后图连通分量个数为n(包含断开的那个点单独算作一个连通分量),那么只需要修n-2条路即可。#include <iostream>#include <vector>#include <cstring>...原创 2019-08-31 22:29:38 · 1076 阅读 · 0 评论 -
PAT甲级 1112 Stucked Keyboard (20 分) 题解
\quad字符串结合map处理即可。三步走:1、对于输入字符串s,找出所有连续出现次数达到k次的字符,比如k=3,s=3caseee1__thiiis_iiisss_a_teeeeeest时得到temp=eiisee2、对于temp中每个字符判断是否重复和是否合法,判断是否重复用map记录字符是否出现过即可。判断字符是否合法即为判断当前字符的每次出现是否都是k次,比如temp中字符s就不...原创 2019-08-28 10:40:08 · 1287 阅读 · 0 评论 -
PAT甲级1078 Hashing (25 分)题解
\quad这道题主要考察平方探测法来解决冲突。下面来讲解一下平方探测法的使用:在平方探查法中,为了尽可能避免扎堆现象,当表中下标为H(key)的位置被占时,将按下面 的顺序检查表中的位置:H(key)+12H(key)+1^2H(key)+12、H(key)+22H(key)+2^2H(key)+22、H(key)+32H(key)+3^2H(key)+32…如果检查过程中H(key)+k2...原创 2019-08-28 11:20:24 · 1397 阅读 · 0 评论 -
PAT甲级1145 Hashing - Average Search Time (25 分)题解
$\quad平方探测法请移步博客。这里说一下查询操作,查询当前数在哈希表中所在位置或者是计算查询次数需要再次模拟插入过程,当找到这个数或者发现这个位置上没有数时表示已经找到这个数或者无此数,无需再查询。程序如下:#include <iostream>#include <cstring>using namespace std;const int maxn = 1e...原创 2019-08-28 12:04:45 · 1263 阅读 · 0 评论