PAT
文章平均质量分 92
PAT(Programming Ability Test),现在又改名为PTA。是浙江大学计算机系研究生入学考试的官方参考竞赛,同时也是诸多企业的合作伙伴。
说文科技
同名公众号【说文科技】,做有态度的研究。
展开
-
使用Java语言刷 pat 题
使用Java语言刷 pat 题1. 搭建Intellij 环境这个很好解决,不再赘述。主要的问题是,如何解决数据输入的问题。如何使用java 读取输入的问题,可以见我的博客:Java 实现标准输入的几种方式2. 如何控制读取结束刚从c语言转移到Java语言的同学,可能会对java语言的输入不大熟悉,不像c语言的scanf()函数那样使用方便,如果我们想先输入数字N,接着再输入N个数字,在...原创 2019-01-13 20:19:21 · 1898 阅读 · 0 评论 -
P1032 字串变换
P1032 字串变换1.题目2.代码3.坑点01.相同的某串字符竟然可以对应多个不同的字符串针对上述的情况,我们就不应该使用map<string,string> 这种方式来存储映射关系,而是应该使用两个数组,分别记录原数组,转换后的数组即可。(同时应该看到因为只有6个转换规则,使用两个数组存储还是很方便的)02.主串中的可替换的字符串可能不止一个。所以需要替换多...原创 2020-02-04 10:39:57 · 396 阅读 · 0 评论 -
n皇后问题
源码如下:#include#include#define maxn 1000double array[maxn];//全局变量 保存皇后的位置 int n;//n*n int count = 0;//是否是符合条件的点 currentRow当前行 bool isRight(int currentRow){ int i ; for(i = 1;i<原创 2018-01-25 20:48:44 · 366 阅读 · 0 评论 -
斐波那契数列
菲波那切数列1.递归解法#include#include//菲波那切数列 int Fib(int n){ if(n == 0 || n== 1) return 1; else return Fib(n-1)+ Fib(n-2); }int main(){ int n; scanf("%d",&n); int sum = Fib(n)原创 2018-01-17 10:22:50 · 415 阅读 · 0 评论 -
c语言中并查集的使用
使用并查集判断一个图是否是连通图1.源代码如下#include #include using namespace std;const int N =1111;vector int> G[N];int father[N] ;bool isRoot[N];//记录每个节点是否作为某个集合的根节点 int findFather(int x){//找出每个节点的父节点 并原创 2018-01-10 10:44:28 · 1768 阅读 · 0 评论 -
并查集详解
并查集详解,所谓并查集就是Union + Find + Set。原创 2019-01-20 16:08:40 · 824 阅读 · 2 评论 -
PAT刷题之段错误
PAT刷题之段错误【updating…】1.什么是段错误?先给出一张图,所谓的段错误就是:Segmentation fault在提交 pat 的一道题时,出现了这个段错误。其实更具体的报错是:Program received signal SIGSEGV,Segmentation fault.我尝试使用不同的测试用例调试时,发现的确存在这个问题,如下:2.如何解决?可能是程序...原创 2019-01-19 10:00:03 · 6117 阅读 · 0 评论 -
PAT 1003 Emergency
PAT 1003 Emergency1. 题意找出最短路径的条数,并输出某种要求下(此题是救援队伍最多)的路径的特征值。2.分析dijkstra算法3.代码#include<cstdio>#include<iostream>#define maxn 500#define INF 100000using namespace std;int N ,M...原创 2019-08-14 21:07:47 · 329 阅读 · 0 评论 -
PAT 1123 Is It a Complete AVL Tree C++版
PAT 1123 Is It a Complete AVL Tree C++版1.题意给出一个整数列,判断由这个数列得到的平衡二叉树是否是一棵完全的平衡二叉树。2.分析主要分成两个步骤:step 1:得到一棵平衡二叉树step 2:判断是否完全第一部分在PAT中已经有题目(pat 1066)实现过了。第二部分也已经题目(记不清了)有实现过。简单的拼接一下即可。3.代码#inc...原创 2019-05-11 21:51:05 · 430 阅读 · 0 评论 -
PAT 1131 Subway Map
PAT 1131 Subway Map (C++版)【updating…】1.题意2.分析主要问题如下:1.如何标志是否换乘?使用一个 unordered_map<int, int> line;用于标记这两个站之间的到底是几号线。因为得到的路线是按照站台依次进行的,所以依次保存两个站台之间的线路信息即可。3.代码其它我怎么觉得这题跟 1018 Public Bike...原创 2019-05-11 20:43:17 · 448 阅读 · 0 评论 -
PAT 1066 Root of AVL Tree C++版
PAT 1066 Root of AVL Tree C++版1.题意给出一个整数序列,现在需要让你输出以这个序列构建得到的AVL树的根节点。2.分析之前我一直都是按照个人的理解做AVL ,对于考试题来说,则是相当简单的,但是如果让我单独实现一棵AVL树,我之前是不会的。但是今天看到晴神的书之后,恍然大悟,又进一步理解到**“算法只不过是一种抽象”**,而代码又只是将这种抽象实现起来罢了。...原创 2019-05-10 20:12:38 · 563 阅读 · 2 评论 -
PAT 1110 Complete Binary Tree C++ 版
PAT 1110 Complete Binary Tree C++ 版1.题意给出一棵树的层次遍历+左右子节点,判断其是否是一棵完全二叉树(complete binary tree,后文简称CBT)。2.分析判断一棵完全二叉树可以借用层次遍历即可。判断是否为完全二叉树的理论如下:case1:如果节点有右节点但是没有左节点,则肯定不是CBTcase2:如果当前节点是最后一个有子树的节点...原创 2019-05-09 19:42:33 · 372 阅读 · 0 评论 -
PAT 1155 Heap Paths C++版
PAT 1155 Heap Paths C++版1.题意给出一棵完全二叉树,然后需要输出这棵二叉树根节点到叶子节点的每条路径。并判断这棵完全二叉树是大根堆还是小根堆,还是不是堆?2.分析step1:因为给出的是一棵完全二叉树,所以我们可以直接建立一棵静态二叉树即可,而不用使用链表式的二叉树。因为输出的路径顺序有要求,我们需要找出叶子节点是从右到左的顺序,这个很好办,只需要修改一下遍历方...原创 2019-05-08 21:43:21 · 419 阅读 · 0 评论 -
PAT 1151 LCA in a Binary Tree C++版
PAT 1151 LCA in a Binary Tree C++版1.题意给出一棵二叉树的中序遍历和前序遍历序列,让你求出这棵树中某两个子节点的最小祖宗节点(LCA)。2.分析这道题的主要思路有如下几种:思路一:找出某个节点的所有父节点(按照顺序从上到下),然后使用两层for循环找到第一次相等的节点就是我们欲求的最小LCA。但是很遗憾,对于这道用时1000ms以内的都显得力不从心。思...原创 2019-05-08 20:36:11 · 432 阅读 · 0 评论 -
PAT 1147 Heaps C++版
PAT 1147 Heaps C++版1.题意给出一个完全二叉树,让你判断是大根堆还是小根堆,并输出这棵二叉树的后序输出。2.分析step1:因为是完全二叉树,所以很好判断是否是大根堆小根堆。step2:那如何输出后序序列呢?可以通过构建一棵静态二叉树的方法,然后遍历输出即可。3.代码#include<cstdio> #include<queue>#i...原创 2019-05-06 11:00:36 · 422 阅读 · 0 评论 -
PAT 1139 First Contact C++版
PAT 1139 First Contact C++版1.题意给出人数N,和关系数M。最后给出查询的数K,让你求出待查询的俩个人该如何处成CP。处CP有规则:如果A和B想成为异性cp,那么会分别找A最好的朋友C【C和A同性】 和B最好的朋友D【D和B同性】进行沟通,现在求的就是这种C-D的朋友数。如果A和B想成为同性cp,那么会分别找A最好的朋友C和B最好的朋友D进行沟通,现在求的就是...原创 2019-05-05 17:35:35 · 1996 阅读 · 0 评论 -
PAT 1135 Is It A Red-Black Tree 【C++版】
PAT 1135 Is It A Red-Black Tree 【C++版】1.题意给出一个先序序列,判断由这个先序序列得到的红黑树是否是一棵红黑树。其中红黑树需满足的定义如下:(1) Every node is either red or black.(2) The root is black.(3) Every leaf (NULL) is black.(4) If a node...原创 2019-05-01 17:09:48 · 643 阅读 · 0 评论 -
【PAT 1143】 Lowest Common Ancestor 【C++版】
1143 Lowest Common Ancestor 【C++版】给出一个二叉搜索树的先序序列,让你求出其两个节点的最小公共父节点。原创 2019-05-01 10:40:04 · 437 阅读 · 0 评论 -
【PAT 1151】 LCA in a Binary Tree C++版
给出中序和先序遍历序列,让你找出给定的查询记录的最小公共父节点,如果给定的值不存在,则按照相应的格式输出。原创 2019-04-30 21:59:13 · 710 阅读 · 0 评论 -
1127 ZigZagging on a Tree C++版
1127 ZigZagging on a Tree C++版1.题意给出一个中序遍历和后序遍历,然后让你求出该树的层次遍历的“之”字型输出。难点在于“之”字型输出。但是真有那么难么?o( ̄▽ ̄)d2.分析主要步骤如下:step 1:由给出的中序序列和后序序列,构建一棵二叉树,这里我不再啰嗦,如有不会的同学,请看我的博客 由中序和后序序列构建二叉树step 2:将得到的二叉树遍历一遍...原创 2019-04-29 19:31:41 · 434 阅读 · 0 评论 -
1138 Postorder Traversal C++版
1138 Postorder Traversal C++版1.题意给出一个先序序列和一个中序序列,让你求出其后序序列的第一个数。2.分析2.1 方法1这题直接可以用构建一棵二叉树的方法去做,但是会得到两个超时的用例。所以不可取。2.2 方法2既然想直接通过构建二叉树的方法得到后序序列不大可能,那么就应该使用其他方法去思考这题的解决。是否可以不用通过构建树的方式去得到答案?肯定是可以的...原创 2019-04-28 23:43:09 · 378 阅读 · 0 评论 -
1115 Counting Nodes in a BST C++版
1115 Counting Nodes in a BST C++版1.题意给出一串数字,让你建成一个二叉搜索树,同时,你需要给出最终的二叉搜索树的最后一层和倒数第二层的结点数。2.分析分成如下两步实现即可:step 1:建一棵二叉搜索树step 2: 使用某种遍历,将节点层数及节点的值放入到vector中step 3:记录该树中最大的层maxFloor,然后输出maxFloor层...原创 2019-04-27 22:16:21 · 299 阅读 · 0 评论 -
1098 Insertion or Heap Sort C++版
1098 Insertion or Heap Sort C++版1.题意给出两个数组值,让你判断第二个数组的值是根据插入排序还是堆排序从第一个数组得到的。2.分析这题同之前的一道pat很相似,不过前一道pat是判断插入排序和归并排序。不过道理都是雷同的,需要注意的是:堆排序的实现。如果得到这个序列是由堆排序得到的中间序列,那么该怎么进行下一步排序呢?我最开始的想法是:找到一个这个堆排序的...原创 2019-04-27 20:31:19 · 401 阅读 · 0 评论 -
PAT 1095 Cars on Campus C++版
PAT 1095 Cars on Campus C++版1.题意给出校园进出车辆的时间以及牌照信息。接着输入查询的时间,让你输出在这个时刻有多少车辆在校园,最后输出一天中停留在校园最久的车子,如果有多辆车停留的时间相同,那么就按照字母顺序输出其牌照信息,然后输出停留的时间。2.分析主要的实现步骤如下:step 1:用一个结构体存储车辆的信息step 2:将车辆进出入的时间转换成当它的...原创 2019-04-26 21:07:48 · 482 阅读 · 0 评论 -
PAT 1089 Insert or Merge C++版
PAT 1089 Insert or Merge C++版1.题意题意很简单,就是给出一个源数组,然后再给出一个中间数组,让你判断这个中间数组是通过“插入排序”,还是“归并排序”得到?2.分析对于这题,主要思路如下:step 1:首先判断是由哪种方法得到这个序列step 2:如果是插入排序,那么再进行下一步插入,然后输出step 3:如果是归并排序,那么还需要多知道一点儿事情,就是...原创 2019-04-25 21:04:15 · 351 阅读 · 0 评论 -
PAT 1080 Graduate Admission C++版
PAT 1080 Graduate Admission C++版1.题意模拟研究生院招生录取过程。浙大每年都有很多人报考(废话,不是这样的话,我也就不会落榜了 ̄へ ̄)。现在的问题是:对于许多考生,以及志愿信息,还有研究生院,该如何招生呢?本题给出的录取过程如下:step 1:根据考生的两个分数(Ge,Gi)的平均分排名,如果排名相同,则比较Ge的分数,如果还相同,则排名相同。step ...原创 2019-04-24 22:28:24 · 362 阅读 · 0 评论 -
PAT 1057 Stack C++版
PAT 1057 Stack C++版1.题意给出一系列栈的操作,让我们模拟动态查询(即在线查询)。本体的在线查询主要是找出中位数,即一个数组中中间的那个数。关于一个数组中中间数的定义如下:With N elements, the median value is defined to be the (N/2)-th smallest element if N is even, or ((...原创 2019-04-23 20:55:44 · 325 阅读 · 0 评论 -
PAT 1068 Find More Coins C++版
PAT 1068 Find More Coins C++版1.题意给出拥有的硬币数和待支付的金额,以及每枚硬币的价值。现在欲让你求出需要什么样的硬币才能精确的支付金额。2.分析解答这题的方法有两种:2.1 深搜深搜的思想就是“放/不放” 两种选择,然后匹配出精确的金额即可。但是需要说明的是:如果这题使用深搜实现,好像最后一个测试用例会超时(最后一个测试用例只有1分)。2.2 动态规...原创 2019-03-29 12:05:53 · 471 阅读 · 0 评论 -
PAT 1111 Online Map
PAT 1111 Online Map C++版1.题意给出一个城市地图,以及每个交叉口之间的距离和耗费时间。让你求出某两个城市之间的路径最短的路径 和 耗时最短的路径。如果路径最短的路径有多条,就需要取这些路径中耗时最短的那条;如果耗时最短的路径有多条,就取路经交叉口最少的那条。2.分析简单的dijkstra算法实现而已。但是需要注意的点有:如果路径最短的路径有多条,就需要取这些路径...原创 2019-03-29 09:55:27 · 490 阅读 · 0 评论 -
PAT 1034 Head of a Gang C++版
PAT 1034 Head of a Gang C++版1.题意给出一串用户通话的记录(记录形式是[name1,name2,time])。互相之间有通话关系的算是在同一个团队中。现在让你求出有多少个团伙,并且求出这个团伙中通话最多的人,以及输出这个团伙的总人数。2.分析解决这个问题可以使用两种方法,两种方法都较简单。一种是深搜法,一种是并查集法。并查集对于解决这种问题十分适合。所以笔者强烈...原创 2019-03-27 17:55:10 · 455 阅读 · 0 评论 -
PAT 1049 C++版
PAT 1049 C++版1.题意给出一个正整数N。欲求出1~N这些数字中包括字符1的个数。例如给出一个数12,从1到12 的数中,包含1的个数一共有5个【1,10,11,12】。2.分析这里给出数个简单的方法,如下:方法一:直接暴力求解,这样在应试的情况下也可以拿到22分。方法二:寻找某种特殊的关系 这里可见柳神的代码 https://www.liuchuo.net/archive...原创 2019-03-25 21:31:58 · 438 阅读 · 0 评论 -
PAT 1014 C++版
PAT 1014 C++版1.题意这是一道模拟题,主要考队列的使用和英语题目的阅读理解。题意如下:给出一个银行的排队规则:01.有N个窗口02.每个窗口的黄线前有M个位置可供排队服务。超过M个位置之后的人,就需要在外面排队,直到窗口中黄线内的人数减少,然后进入到黄线内。【如果同一时刻有多个黄线内的人数少于M,则对在外面排队的人会就近选择一个窗口号小的进行服务。】03.前面一个人服务完...原创 2019-03-24 21:50:21 · 422 阅读 · 0 评论 -
PAT 踩过的坑
PAT踩过的坑1.输出格式的问题这里想吐槽一下pat 的输出 格式问题。pat常见的输出格式是:两个数字之间通常有空格,但是最后一个数字之后是没有空格的。这个一般很好实现。在i!=n-1 输出空格即可。如果i==n-1时,就只输出结果即可。但是,今晚遇到了一个更加奇葩的题。题目是甲级1101,我在输出格式的地方卡了好久。我的输出代码是: if(count == 0) cout <...原创 2019-02-08 21:12:40 · 505 阅读 · 0 评论 -
PAT 1148 C++ 版
PAT 1148 C++版 [存在问题]1.题意简单版本的狼人杀游戏。所有的最终序列需满足如下关系:有且仅有两个狼人,且其中的一个狼人在说谎陈述内容不应该有冲突2.分析如何做这种题目?我其实分析了很久,实在想不出什么好的解法,于是采用暴力破解的方法。思路如下:step 1:使用双层for循环,对陈述内容进行处理。假设i,j两人都是说谎的人,再在此基础上分别假设i是狼人或者j是狼...原创 2019-02-06 08:46:12 · 476 阅读 · 0 评论 -
PAT 1124 Raffle for Weibo Followers
PAT 1124 Raffle for Weibo Followers Java1.题意输入:数字m,n,s,一串人名。第s个为获奖的人,则s+n 为下一个获奖的人,如果此人已经获奖,那么则往后顺移一位。输出:获奖人的名单。【按照获奖的顺序】2.分析使用 LinkedHashSet 保存获奖人的名单,这样不仅可以去重,而且可以保持顺序。3.样例输入9 3 2Imgonnawin!...原创 2019-01-17 22:08:03 · 426 阅读 · 0 评论 -
PAT 1120 Friend Numbers java 版
PAT 1120 Friend Numbers java 版原创 2019-01-17 20:39:08 · 453 阅读 · 0 评论 -
PAT 1109 Group Photo [Java]
PAT 1109 Group Photo [Java]1. 题意在为集体拍照时,构成规则是非常重要的。给出为N 个人站成K 行的规则如下:每行的人数必须是N/K (向下取整),所有的剩下的人(如果有的话)站在最后一排后一行的人必须不矮于前一行的人每行中,最高的人站在中间的位置(定义成:m/2 + 1),m是该行人的总数, 除法的结果必须向下取整。每行中,其它的人必须按照 从高到矮(n...原创 2019-01-16 09:30:46 · 414 阅读 · 2 评论 -
PAT [Error] expected unqualified-id before numeric constant
1、出现这类问题,通常都是因为标识符的ID命名不符合规范。原创 2017-01-22 21:02:39 · 2115 阅读 · 2 评论 -
PAT 1087 C++版
PAT 1087 C++版1.题意给出图的顶点,边信息。求出输入的起始点到ROM的最短距离,如果有不止一条路径,那么找出幸福值【幸福值的标记是通过每个顶点的幸福值确定的】最大的那条路径。2.分析其实题目大都是相似的,主要是考察 dijkstra 算法,这个算法是用于计算单源最短路径,我们只需要计算从 staLoc 到 ROM上的最短路径即可,然后记录其每个路径的最大幸福值;同时记录最短路...原创 2019-02-23 11:30:37 · 540 阅读 · 0 评论 -
PAT 1072 C++版
PAT 1072 C++版1.题意给出一个图的顶点,以及边信息。每个顶点代表的含义是一个居民点。现在需要在这些居名点之间修建一个gas station。求出一个合理的gas station,使得这个gas station到任一个居民点的最近距离minimum取到最大值,但是又不能超过gas station所能服务的最远距离Ds。这个最远距离Ds是程序中的一个输入。如果存在多个minimum相...原创 2019-02-21 20:37:38 · 673 阅读 · 0 评论