
PAT甲级
哦啦哦啦!
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
PAT1137 Final Grading 两个测试点不通过,仔细读题
第一遍没有仔细看题目,题干中提到的最终成绩不小于60,不是指Gfinal不小于60,而是计算后的G不小于60,卡了好久了,半天没看出哪里问题,final grade 和Gfinal太误导人了怪自己太菜了≡(▔﹏▔)≡,下面是AC代码#include<iostream>#include<vector>#include<cstdio>#include<algorithm>#include<unordered_map>using na原创 2020-09-02 22:50:46 · 340 阅读 · 0 评论 -
PAT 甲级1031 Hello World for U 关系式推导
这道题的关键在于对底部宽度和高度之间关系的理解,加之题中使用英语给出的关系,特别难以读懂对于max函数,可以直接理解成n1=n3=k<=n2,结合之后的关系式,然后经过画图发现,输出图形的高度=(字符串长度+2/3)有了高度,剩下分两步输出图形即可:输出底部之上的,循环次数为high-1,中间空格的个数为len-2*(high-1)-2,其中len为字符串长度 输出底部,字符串起始下标为high-1,长度为len-2*(high-1)#include<iostream>..原创 2020-08-26 10:56:02 · 174 阅读 · 0 评论 -
PAT 甲级 1081 Rational Sum 分数处理问题
分数问题,一些小细节的处理特别麻烦,我这里采用的是别人整理好的系统化的方法来进行处理,下面讲解一下思路:这里的分数同一采用假分数的形式来处理,并且规定分母都为正,即如果分母为负数,上下同时取反,数0的写法为分子为0,分母为1 化简时,求出分子分母的最大公约数(PS:这里规定求解时都转化成正数,有兴趣的可以百度一下负数的gcd就明白了),然后同时除以最大公约数即可 关于输出最后的结果,有下列三种情况:分母为1,表示结果为整数,输出分子即可 分子大于分母,转为带分数的形式,注意这里符号和整数部分..原创 2020-08-23 21:48:42 · 218 阅读 · 0 评论 -
PAT1076 Forwards on Weibo BFS+图
思路:有向图的bfs搜索,注意题目的逻辑关系,即谁可以转发谁,因为数据量比较大,邻接矩阵存储然后遍历每个点的话代价太大,不过题目时间给了三秒....如果时间要求高的话,应改用邻接表存储,直接判断一下当前的人有多少次被关注就行,不用一一判别,省很多时间。注意每次查询之前需要更新inqueue数组,所有点设置为未访问#include<iostream>#include<queue> using namespace std;struct node{ int d...原创 2020-07-10 19:11:48 · 183 阅读 · 0 评论 -
PAT甲级1107 Social Clusters 1、4样例没过解析
观察样例,发现A、B、C三人,即使A和C并没有共同爱好,但他们和B都有共同爱好,所以他们也属于同一个集合因此我考虑将有关联的爱好捆绑在一起:合并一个人的所有爱好,只要A和B的爱好有交集,那么他们的所有爱好都会被绑定到一个集合中统计人数时,取每个人的第一个爱好(题目保证每个人至少一个爱好),找到该爱好所属的集合的根,将根的值放入result,累加一次num[r];最后将每个集合对应的人数放入out,排序一下输出即可但是提交后发现,1、4样例无法通过,检查了半天思路并没有问题啊...很纳闷,最...原创 2020-07-02 09:28:14 · 386 阅读 · 2 评论 -
PAT1034 Head of a Gang 并查集实现
利用并查集来实现,一个重要的思想是,对于一个集合而言,将该集合所有有关的信息捆绑到根节点上,当数据发生变化时,我们只需要修改该集合下根指向的数据即可姓名和编号的转换我利用的是map<string,int> ,相应的编号转到姓名为map<int,string>题中还有一个关于回路问题,转换到并查集中就是当前处理的两个结点在同一集合中,这时更新当前集合的总通话时间和首领信息和两个集合合并情况并不一样,注意区分,详细解析见代码#include<iostream&g...原创 2020-06-30 20:45:26 · 315 阅读 · 0 评论 -
PAT甲级1151 LCA in a Binary Tree LCA+DFS
LCA问题在常规树中的实现,思路和1143一样,本体主要要解决的就是递归子树边界的问题我采用的map映射的方法,将中序遍历的结点值映射为下标位置,那么如果用下标来代替结点值的话,当前的树便是一颗bst树了利用这个特性,比较映射值便可以判断左右子树的关系#include<iostream>#include<vector>#include<unordered_map>#include<cstdio>using namespace std...原创 2020-06-29 16:54:54 · 2780 阅读 · 0 评论 -
PAT甲级1143 Lowest Common Ancestor BST+LCA
本想建树然后通过递归左右子树的形式去做,但是发现题中说明最多有一万个结点,写完以后果然超时....判别LCA的方法判断当前的两个点的位置情况,如果一个在左子树,一个在右子树,那么根便是最小公共祖先;如果都在左子树,递归左子树判断;如果都在右子树,递归右子树判断;如果一个就是根,那么它便是最小公共祖先解决超时方法:由于题目告知是bst树,其实只需要比较结点值便可以确定左右子树的关系。但是递归时根结点的判断比较麻烦。主要有如下两种情况:1.都在左子树,那么左子树的根下标就是当前的..原创 2020-06-29 16:43:44 · 237 阅读 · 0 评论 -
PAT甲级1127 ZigZagging on a Tree 层序遍历
思路:层序遍历然后结果,要求是遍历顺序是不同深度采用不同的顺序(假设第二层是从左到右,那么第三层就是从右往左)其实只需要给每个结点加一个深度信息即可,由于层序遍历必然同一深度在一块区间,因此将每个区间分开保存,上一层是从左到右,那么当前层是从右到左输出(反转一下即可)代码#include<iostream>#include<queue>#include<vector>#include<map>#include<algori...原创 2020-06-28 20:53:40 · 209 阅读 · 0 评论 -
PAT甲级1147 Heaps
思路:1.判断堆的类型通过按层序遍历顺序遍历一遍这棵树,如果子树结点值大于根,则maxheap置为false;类似的,如果子树结点值小于根,则minheap置为false最后根据minheap和maxheap的值输出相应结果2.后序遍历就是常规的方法,不同在于堆结构在数组中实现,根据下标遍历代码#include<iostream>#include<vector>#include<queue>using namespace std;vector<i.原创 2020-06-19 19:38:18 · 225 阅读 · 0 评论 -
PAT甲级1093 Count PAT
pnum【i】记录对于下标为 i 的位置,其左边的 ’ P ’ 个数;tnum【i】记录对于下标为 i的位置,其右边’ T '的个数;然后对于每个’A’,以当前A为中心的PAT组合个数就是pnum【i】*tnum【i】,对每个A计算该值,然后累加,输出最后结果即可#include<iostream>#include<cstring>#include<vector>using namespace std;int main(){ string s;.原创 2020-05-29 22:48:24 · 203 阅读 · 0 评论 -
PAT1064 Complete Binary Search Tree 完全二叉搜索树
利用完全二叉树以及层序遍历和中序遍历的性质求解但是转换的思路过程很复杂,我这里用图片描述,更容易理解由题目给出的结点我们可以构造出这样一棵完全二叉搜索树不难发现这棵树的中序遍历结果正好是一个递增序列(任何二叉搜索树都满足)新建一个inorder和levelorder分别记录中序和层序遍历结果上图中的数字也可以理解为当前结点在inorder数组中的下标位置同样的,将这个思想转换到这棵树的层序遍历中,下图中的数字即每个结点在levelorder数组中的下标位置下面开始构造这棵树思路是:中序原创 2020-05-19 22:56:30 · 178 阅读 · 0 评论 -
PAT甲级1123 Is It a Complete AVL Tree完全AVL树
在AVL树的基础上增加了层次遍历,对于是否时完全二叉树的判别,采用方法是当读到某个结点的左孩子或者右孩子为空的时候退出循环,如果不为空,则递增cnt,最后判断cnt是否等于n,如果等于表明已经全部读完,是完全二叉树#include<iostream>#include<vector>#include<algorithm>#include<queue>using namespace std;struct node{ int data,heig.原创 2020-05-13 20:48:37 · 195 阅读 · 0 评论 -
PAT甲级1066 Root of AVL Tree
常规的AVL树模板题,建好树后直接输出根结点的数据即可#include<iostream>#include<vector>#include<algorithm>using namespace std;struct node{ int data,height; node *l,*r;};int getheight(node* root)//空结点高度0{ if(root==NULL)return 0; else return.原创 2020-05-13 20:38:49 · 164 阅读 · 0 评论 -
PAT甲级1109 Group Photo
思路:1. 结构体p存储学生姓名和身高信息,自定义cmp排序规则是按身高递减序,如果身高一样则按名字字典序升序 2.getorder函数实现将num个人按照cmp规则排序好后,将其在一排中的位置记录好举个例子:这里有五个人,排序好后是1、2、3、4、5,他们在一排中的位置应该为4、2、1、3、53.human数组存储当前排的人信息,order数组存储位置信息,遍历每一排,更新两个数组信息,然后调用output函数输出结果#include<iostream>#include<.原创 2020-05-12 12:59:20 · 222 阅读 · 0 评论 -
PAT1136 A Delayed Palindrome 字符串相加+回文数
思路:第一眼以为是个简单的字符串转数字相加就可以,但是数字最多可能有1000位,常规的long long 都无法存下,这里就需要转换成字符串处理相加1.ispalindrome函数判断是否是一个回文字符串,是则返回true2.getsum需要一个参数a,计算a加上a的反转数字,并返回结果3.剩下的看注释即可,题目不难,但是要考虑的细节很多#include<iostream>#include<cstring>#include<algorithm>using.原创 2020-05-11 13:40:26 · 183 阅读 · 0 评论 -
PAT1115 Counting Nodes in a BST
题意:按照输入的顺序建一颗BST树,然后求深度最大的结点数n1和深度第二大的结点数n2思路:常规的建树,maxdepth记录最大深度,numofdepth记录每个深度下的结点数,根节点深度为1,bfs遍历树,每入队一个结点,更新最大深度和累加一次当前深度的结点数最后n1=numofdepth【maxdepth】,n2=numofdepth【maxdepth-1】#include<iostream>#include<vector>#include<queue&g.原创 2020-05-08 20:21:22 · 185 阅读 · 0 评论 -
PAT甲级1053 Path of Equal Weight
思路:常规的一颗树搭配常规的遍历,但是难点在于如何实现对于符合题目要求的数据,先输出字典序大的我采用的方法是每读入一个非叶结点,对于其孩子结点根据其重量的大小递减排序,这样dfs遍历的时候可以保证字典序大的一定会被优先遍历到#include<iostream>#include<vector>#include<algorithm>using name...原创 2020-05-07 21:18:49 · 188 阅读 · 0 评论 -
PAT1110 Complete Binary Tree完全二叉树
先来看一下完全二叉树的定义:除了最下面一层之外,其余层的结点个数都达到了当层能达到的最大结点数,且最下面的只从左到右连续存在若干结点,而这些连续结点右边的结点全部不存在。例如:下图中A是一颗完全二叉树,B不是完全二叉树转换到这道题,解题思路是:从根结点开始进行bfs,当bfs队列的队头元素为-1时跳出循环,根据完全二叉树的性质,如果这时已经访问完所有的树结点,那么这棵树就是一颗完全二...原创 2020-05-06 21:10:29 · 260 阅读 · 0 评论 -
PAT1102 Invert a Binary Tree倒置二叉树
思路:很常规的建树遍历问题,按照题目输入在读数据的直接建树,因为根节点不是任何结点的孩子,所以那个没有出现过的点就是根节点本题的遍历过程比较特殊,右孩子的优先级大于左孩子,对于层序遍历,只需要先判断右孩子在判断左孩子即可同样的,对于中序遍历,应采用右孩子根左孩子的顺序#include<iostream>#include<vector>#include<q...原创 2020-05-05 17:02:03 · 255 阅读 · 0 评论 -
PAT甲级1086 Tree Traversals Again 已知先序中序求后序
思路:一开始过度关注这个堆栈的过程,半天get不到思路后来尝试着写了一下出栈序列,发现正好是中序遍历结果,那么这道题就转换成已知先序中序求后序的题对于这道题,入栈序列:123456;出栈序列:324165根据这个建树然后后序遍历即可#include<iostream>#include<vector>#include<stack>using na...原创 2020-05-05 15:25:49 · 179 阅读 · 0 评论 -
PAT1116 Come on! Let's C
思路:1.hash数组记录每个id的排名,check数组记录每个id是否是第一次查询,prime[ i ]为1表示1是素数2.首先在1~10000范围内将所有素数和非素数标记好,然后读入n个数,hash记录排名(从1开始)3.输出时先判断temp在hash数组中是否有排名,没有则输出"Are you kidding?";如果有在判断是否是第一次检查,如果不是则输出"Checked";接...原创 2020-05-01 15:12:14 · 174 阅读 · 0 评论 -
PAT甲级1144 The Missing Number 段错误
很简单的一道题,但是最后两个测试案例很蛋疼,改了很久终于ac了最后一个测试案例,显示段错误,初步诊断为数组范围太小,但是开的太大又接受不了,测试发现给的数据可能会很大,因此原判定条件应还有个上限,即<100000倒数第二个测试点 n为100000,并且刚好是1~100000,因此最小缺失数为100001,最后for循环上界改一下就通过了#include<iostream&g...原创 2020-04-30 13:51:30 · 280 阅读 · 0 评论 -
PAT甲级 1091 Acute Stroke 三维连通块问题
思路:很典型的一道连通块问题,难点在于是三维的,因此增量数组需要有三个方向,并且还需统计每个块中包含的结点数量,如果数量小于t,不计数实现步骤1.枚举每一个位置,如果是0,跳过;如果是1,bfs搜索附近相连的所有为1的元素位置,并将inq数组置为true,以防止走回头路2.judge函数判断当前搜索的位置是否合法3.bfs需要有返回值,即当前块中1的数量,入队一个1,递增一下注意点:...原创 2020-04-29 21:08:38 · 279 阅读 · 0 评论 -
PAT甲级1108 Finding Average
思路:这是一道字符串判断问题,需要判定的条件比较多,按照常规做法代码量比较大,并且比较费脑力,这里我学习了大佬们的代码后,练习了一下sscanf和sprintf的用法,然后用这个可以很简单的解决这种问题1.a数组存储每个读入的字符串2.利用sscanf从字符串中读取double类型的数据,赋值给temp3.从temp中读取精确到小数点后两位的数据,赋值给b数组4.最后只需比较a和b数组...原创 2020-04-23 21:13:52 · 188 阅读 · 0 评论 -
PAT甲级 1046 Shortest Distance
思路:特别有意思的一道题,题中给出的n个点构成一个回路,在解题的时候采用一个固定的方向求路径长度,但因为是回路,所以反过来走也是可以通的。只需要求出一个方向的距离,反向距离就是sum-当前长度,两者中取较小的就是所求答案1.但是这个回路最多可以有100000个结点,并且测试数据最多可以有1万组,对每组输入都遍历一次肯定超时2.如果用dp思想在读入后计算好每种查询可能的结果,但是对于10万...原创 2020-04-22 14:43:52 · 202 阅读 · 0 评论 -
PAT甲级 1140 Look-and-say Sequence 字符串处理
题解:其实就是统计连续的相同数字出现次数,然后转化为该数字后面跟上次数的格式需要注意1.题目给你的那个初试d就是第一次,因此对于题目中给的N次处理,实际上是n-1次2.字符串更新时,string+=char+char的形式是错误的,应分两步进行或者改为string+=char+string的形式#include<iostream>#include<cstring&g...原创 2020-04-19 16:33:21 · 193 阅读 · 0 评论 -
PAT1145 Hashing - Average Search Time
本题是 pat1078hashing的变种题,题目意思很绕,而且描述的不是很清楚,做的时候遇到了很多的问题解题步骤:1.对于输入的msize(hashtable表长),如果不是素数的话,需要求出比msize大的最小的素数,令msize等于该素数值2.平方探查法将temp插入hashtable,如果k在【0,msize)区间内都没有找到合适的位置的话视为无法插入3.探测次数采用和上面插入同...原创 2020-04-12 22:34:07 · 221 阅读 · 0 评论 -
PAT甲级 1084 Broken Keyboard
题意:1.在第一行字符串中找出第二行中并没有出现过的字符,然后输出2.查找的时候按照从左往右的原则,并且输出的时候需要保证都是大写的字母这道题和之前的PAT A1050很像,利用hashtable思想解决起来很方便,但是如果采用遍历的遍历的方法的话复杂度会很高#include<iostream>#include<cstring>#include<map&...原创 2020-04-12 20:09:00 · 176 阅读 · 0 评论 -
PAT甲级1050 String Subtraction
题意:给你两个字符串s1和s2,要你在s1字符串中删去所有在s2中出现的字符,其中字符为ascii编码,所有最多有256个字符解题思路:1.按行读入两个字符串,m记录每个ascii码字符在s2中是否出现,初值为false2.遍历s2字符串,把其他出现的每个字符在m中标记为true3.遍历s1字符串,如果当前字符在s2中未出现,则输出代码:#include<iostream&g...原创 2020-04-12 13:34:47 · 133 阅读 · 0 评论 -
PAT甲级1048 Find Coins
题意:给你n个面值范围为【1,500】之间的硬币,然后要求两个硬币相加结果为m(注意这里只允许是两个硬币,并且第一个硬币的币值需要小于等于第二个硬币)解题思路:1.考虑到题目对于时间复杂度要求较高,因此对于每两两硬币遍历是不可取的O(n*n),我采用对硬币币值进行遍历O(500*500)2.coinnum存取每种硬币存在的个数,用于在遍历过程中,存在两个币值相等的硬币相加问题3.res...原创 2020-04-12 13:22:12 · 130 阅读 · 0 评论 -
PAT甲级1078 hashing
题目大意:利用除留余数法建hashtable,然后利用平方探查法缓解hash值冲突问题,然后要你输出每个输入的值在hashtable中的下标位置,如果不存在的话输出 -解题思路:1.当给的表长msize不为素数时,需要先求出比msize大的最小的素数2.如果temp%msize的位置已经有元素,那么对H(key)+kk位置进行查找,如果H(key)+kk大于msize,则取模msize。若...原创 2020-04-11 22:43:38 · 191 阅读 · 0 评论 -
机试常用英文词汇总结
关键的几个词汇不认识特别影响题意的理解,下面是我经常忘了意思的几个词…单词翻译permutation排列、置换real numbers实数accurate up to精确到2 decimal places两位小数be rounded to四舍五入syntax语法parentheses圆括号precedences优先...原创 2020-04-05 13:26:52 · 364 阅读 · 0 评论 -
PAT甲级考纲(最少的时间换尽可能多的分数)
下面的考纲从最重要的、考试概率最大的开始讲起,用最少的时间得最多的分数。祝大家考一个好成绩!图论算法★★★★★图论算法几乎每年都有,99%会考,剩下1%是出卷老师啊想晃你一下。搜索算法DFS/BFS★★★★假如出题老师手下留情,可能会出图的搜索问题。搜索算法一般以DFS和BFS为主,简单一点就是纯算法,难一点就是加上各种条件和剪枝。无论是在上机考试还是在PAT中,都属于基础题目,不一定出,...转载 2020-04-05 12:54:56 · 3852 阅读 · 6 评论 -
PAT1052 Linked List Sorting 最后一个样例不得分
思路:构造好链表,然后按照键值从小到大排序,输出最后排好序的链表易错点:1.sort函数排序右区间应大于当前实际区间,右区间是开区间例如我们要对node[100]中前50项排序sort(node,node+49,cmp);//是错误的,该函数排序区间【0,49)正确写法应是:sort(node,node+50,cmp);//排序区间【0,50)2.存在特判,在题目没说明链表...原创 2020-03-27 09:55:12 · 175 阅读 · 0 评论 -
1105 Spiral Matrix (25分)
题意:第一行输入数据的个数n,然后输入n个数字,首先对n个数按从大到小顺序排序。最后输出的时候按照螺旋状输出。解题思路:1.state记录当前填充方向,首先从右开始,按照右下左上的顺序,一直循环2.prerow,precolumn记录上一个位置的行和列数据3.在填充好一个数字以后,及时更新下一个位置的信息(prerow,precolumn)#include<iostream>...原创 2020-03-01 20:55:30 · 162 阅读 · 0 评论 -
PAT甲级1038 组成最小数
Given a collection of number segments, you are supposed to recover the smallest number from them. For example, given { 32, 321, 3214, 0229, 87 }, we can recover many numbers such like 32-321-3214-022...原创 2020-01-02 14:35:53 · 227 阅读 · 0 评论 -
PAT甲级1030 Travel Plan (30分)
题解:题目大意是告诉你每个城市间的距离和开销,让你求出从起点到终点的最短距离,然后如果距离相同的话要最小开销,最后输出这条最短的路径、最小距离和最小开销思路:finalmin记录最后最短路,curpath记录当前路径,cost和len分别记录两两城市间的开销和距离,visit是访问标记dfs从起点开始深搜遍历所有可能,到达终点后判断是否是最短距离1.小于最短距离,更新数据2.等于最短距...原创 2019-12-31 17:07:24 · 155 阅读 · 0 评论 -
PAT甲级1056 Mice and Rice
题解题目要表达的意思特别绕,没看翻译之前,一度怀疑自己的水平?首先给你一个随机比赛序列。然后每NG个数的人在一个小组比赛。这个小组最肥的老鼠参加下一场比赛,在这一轮(所有的小组赛比完)淘汰的赋予排名,胜利的进入下一场比赛,重复上面的操作,一直找出冠军。注意:到最后不足NG人也被视为一组就拿题目中的数据来说:6 0 8 一组 7 10 5 一组 9 1 4 一组 2 3 一组4组最多诞...原创 2019-11-23 15:38:37 · 172 阅读 · 0 评论 -
PAT甲级1058 A+B in Hogwarts
题意就是从字符串中取出相应的数值,相加处理后输出就行#include<iostream>#include<string>using namespace std;int main(){ string a,b; int p1=-1,p2=-1;//两个小数点的位置 int g1,g2,s1,s2,k1,k2; cin>>a...原创 2019-11-19 21:21:17 · 117 阅读 · 0 评论