![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT
文章平均质量分 89
淘学书童Q
这个作者很懒,什么都没留下…
展开
-
2020.7.25 PAT线上考试后记
又是被钉在耻辱柱上的一天,窗外依旧是淅淅沥沥和仿佛没有尽头的雨幕,我再次站在了失败过后的起点上手边是同自己一起败下阵来的草稿纸,浏览器上还站着那一排有关考试和刷题的标签页,博客的这个界面也很熟悉,只是这次没有往上粘代码失败的时候总会问自己,我过去的这段时间足够努力了吗?如果能更加努力一点,结局又会是怎样?那些站在前排拿着满分的人比我更努力吗,或者差距在哪里虽然莫名的乐观和厚脸皮一直支持我走到这里,但这几年的每次考试的状态都很差确是事实。我只好不停的告诉自己,哥们儿,你做题太少了,哥们儿,你功夫还没到.原创 2020-07-25 19:07:44 · 1199 阅读 · 9 评论 -
PAT A1099 Build A Binary Search Tree ——木落雁南度,北风江上寒
PAT A1099 Build A Binary Search Tree给了树形和节点值确定一棵BST,输出层序。层序如果不想bfs的话,可以用二维数组收集每层的节点值,保证收集的时候都是先访问左边再访问右边所以可以放在一个dfs中解决:节点值排序变成中序序列,使用题目所给结构中序遍历(dfs),同时传个层数lv下去,则过程中访问到的节点对应中序序列的顺序,把对应的节点值放到level数组相应的层中即可#include<iostream>#include<vector>原创 2020-07-23 15:15:56 · 93 阅读 · 0 评论 -
PAT A1088 Rational Arithmetic ——潮平两岸阔,风正一帆悬
PAT A1088 Rational Arithmetic今天模拟居然放了这道题。。。基本功?之前写这个恶心了,这次放到最后做的,也想起了柳婼小姐姐的写法,所以还算顺利目前改过long long之后,还有最后一个测试点没过,实在想不出是什么情况,我这里除了main前面,真的一滴long long 都没有了,希望有同学看到能指点一下#include<iostream>using namespace std;long long gcd(long long a,long long b原创 2020-07-22 20:00:04 · 102 阅读 · 0 评论 -
PAT A1147 Heaps ——春风十里扬州路,卷上珠帘总不如
PAT A1147 Heaps和1155是一样的,这道题先做的,当时没有考虑把遍历和判断放到一起,不过像这种判断 if((lvodr[j] < lvodr[j * 2] && (j * 2 + 1 > N || lvodr[j] < lvodr[j * 2 + 1])) != min_flag)还是挺好玩的,#include<iostream>#include<vector>using namespace std;int M,N;原创 2020-07-19 16:52:37 · 116 阅读 · 0 评论 -
PAT A1149 Dangerous Goods Packaging ——闲云潭影日悠悠,物换星移几度秋
PAT A1149 Dangerous Goods Packaging和单身狗那道题类似,不同的是,这里的狗都可以脚踏N只船(我最开始都没注意到,,)所以首先多对多关系存入二维数组,然后维护一个标记数组,对于每一个输入的点,标记其出现了,并且遍历这个点的邻接点,看有没有之前出现过的,if有,则爆炸#include<iostream>#include<vector>using namespace std;vector<vector<int> >原创 2020-07-19 16:00:29 · 144 阅读 · 0 评论 -
PAT A1154 Vertex Coloring ——多少楼台烟雨中
PAT A1154 Vertex Coloring还以为是地图涂色,吓坏了,实际上只是检验邻接点有没有相同的颜色,然后数一下颜色个数颜色个数用set来数,输入完图和每个顶点的color之后,遍历每个顶点的邻接点,看两个点的颜色是否相同,over~#include<iostream>#include<vector>#include<set>using namespace std;vector<vector<int> > vv;原创 2020-07-19 15:27:04 · 82 阅读 · 0 评论 -
PAT A1155 Heap Paths ——三更灯火五更鸡?
PAT A1155 Heap Paths判断大小堆or not,并输出顶点到叶子的所有路径,右边的优先(dfs先递归右子树)层序是堆的好搭档,为方便计算,下标从1开始。输入后比较前两个元素(即顶点与其子的大小),定下堆的整体感情基调。因为要输出路径,这里选择了dfs,对于每个顶点root,右孩子为root * 2 + 1,左孩子为root * 2。if存在右孩子或者,则比较大小,判断与整体的基调是否相符,并向下递归;if没有孩子,即到达了叶子,则可以输出路径感情出现变化则不是堆#include&原创 2020-07-19 14:49:41 · 122 阅读 · 0 评论 -
PAT A1143 Lowest Common Ancestor ——沉舟侧畔千帆过,病树前头万木春
PAT A1143 Lowest Common Ancestor第一次遇到LCA,想的比较乱,感觉有点并查集的意思,又好像不行。开始的想法是用BST的性质和前序建树,建树过程中做一个father数组,然后再dfs做一个level数组,之后就可以根据两个数所处的层数进行处理:下层的顺着father数组往上走,直到俩个层数一样,如果此时两个下标相等,说明之前上层那个就是公共祖先;如果不相等,两人同时向上走,直到下标相等,此时就找到了LCA由于受到BST的诱惑,查找一个数的位置(是否存在)时,甚至还写了二分原创 2020-07-19 14:21:34 · 101 阅读 · 0 评论 -
PAT A1067 Sort with Swap(0, i) ——天街小雨润如酥,草色遥看近却无
PAT A1067 Sort with Swap(0, i)本题使用了姥姥教的方法,通过交换过程可以发现他们形成了一个闭环,大家手拉手,每个人一步迈到自己应该去的位置(当然这中间有一些single dog是岿然不动的)。but一个序列中可能会有多个闭环。num个人组成的环需要num-1步归位,又由于只能用0交换,没有0的环需要先把0换进去消耗1步,然后组成num+1个人需要num步归位,共需要num+1步。所以问题变成统计序列中存在的闭环数,所有在环中的人数(N-dog),然后分成0在不在环中两种情原创 2020-07-19 01:27:45 · 158 阅读 · 0 评论 -
PAT A1066 Root of AVL Tree ——春水碧于天,画船听雨眠
PAT A1066 Root of AVL TreeAVL这东西记一次忘一次,每次看就像披着初恋外衣的旧情人(or reverse)以下应该是较为标准的模板方法,只是好久没有用过指针了,所以写了个静态的版本,有些地方有点别扭#include<iostream>#include<vector>using namespace std;struct Node{ int data,left,right,height; Node(){ lef原创 2020-07-19 01:04:57 · 119 阅读 · 0 评论 -
PAT A1135 Is It A Red-Black Tree ——溪云初起日沉阁,山雨欲来风满楼
PAT A1135 Is It A Red-Black Tree通过此题才了解了红黑树,之前由于这个名字太唬人了一直没敢看——原来这货的平衡性比AVL要弱,目的仿佛是为了减少旋转的开销?以比较小的代价实现较高查找效率。(ps:然而又旋转又变色更吓人,业原火?)本次的任务是检查三个性质:根节点为黑,直接看;路径上不能有连续的两个红,可以在建树的参数中传个color,上下一比较就知道了;任一节点到其叶节点的所有路径中,黑的数量要相等(因为红不能连续,而黑要数量相等,所以可以保证长路径不会大于短路径的2倍)原创 2020-07-19 00:48:01 · 167 阅读 · 0 评论 -
PAT A1119 Pre- and Post-order Traversals ——小楼一夜听春雨,深巷明朝卖杏花
1119 Pre- and Post-order Traversals到此为止终于把甲级上的这155道都摸了一遍,前后花了好长好长时间——我也不想这么慢,同样过这一生,比别人少做好多事。。。先序是根左右,后序是左右根,所以当一个节点只有左子树或只有右子树的时候,两人都不清楚到底是左子树还是右子树——so不能唯一确定本题的想法是走跟之前正常建树一样的流程:一个序列提供根节点,另一个序列定位,然后划分左右子树。不同的是这里要提供的根节点是当前序列【左子树的根节点】(if没有左子树,那个位置就是右子树的根原创 2020-07-18 23:50:47 · 127 阅读 · 0 评论 -
PAT A1134 Vertex Cover ——悲欢离合总无情,一任阶前、点滴到天明
PAT A1134 Vertex Cover判断所给集合中的点有没有cover到所有的边。在存储图的二维数组中,每个一维数组可以看作与某个顶点相关的所有边,所以当一个顶点出现时,就表示能cover到她的一维数组中的所有边so二维数组存储输入的图(边),再搞一个顶点的hash数组,之后开始判断,对于每个输入的集合,在hash数组中标记其中的点——每标记一个点就相当于划掉了二维数组中此顶点对应的一维数组,标记完看一下那些没被标记的顶点,遍历其一维数组,看与之相邻的顶点是否被标记了,如果没有,就发现了一条没原创 2020-07-14 07:52:56 · 113 阅读 · 0 评论 -
PAT A1127 ZigZagging on a Tree ——多情只有春庭月,犹为离人照落花
PAT A1127 ZigZagging on a Tree#include<iostream>#include<vector>using namespace std;struct Node{ int data; int left = -1,right = -1;};vector<Node> vn;vector<int> vin,vpost;int build(int inL,int inR,int postL,int p原创 2020-07-13 22:58:27 · 94 阅读 · 0 评论 -
PAT A1110 Complete Binary Tree ——雨打梨花深闭门
PAT A1110 Complete Binary Tree思路不好,平添烦恼判断是不是完全二叉树,一开始想的是这种树前n-1层是满的,最后一层可能有空位,所以遍历一下记录每层的数量,前几层根据数量判断,最后一层看空位是不是都在后面没考虑细节就开搞了,选用了简单的dfs,判断最后一层时才发现需要定位到最后一个父节点,此时当事人是非常后悔的,要么改成bfs,要么原地想办法补救,后来选择在dfs中收集每层的元素,当根据num得到最后一个父节点的位置后,减去前几层的数量,则可以定位最后一个父节点在所在层数原创 2020-07-13 18:16:44 · 96 阅读 · 0 评论 -
PAT A1080 Graduate Admission ——松下茅亭五月凉,汀沙云树晚苍苍
PAT A1080 Graduate Admission根据分数进行排名,再根据志愿学校依次录取,如果有与学校录取的最后一名排名相同且志愿相同的学生,都要一并录取,保证公平,即使已经没有名额(还好没说保护一志愿)那么顺着题意将输入放入学生数组,另搞了一个rank数组保存学生ID,之后根据学生分数排序rank数组(多弄了一个rank是因为写到录取的时候,判断如果没有名额了,就去看看被录取的最后一名跟我是不是一个水平,如果是的话,他能上那我也能上。而录取数组里存的是学生的原始ID,如果这时候学生数组被排序原创 2020-07-13 12:52:50 · 142 阅读 · 0 评论 -
PAT A1031 Hello World for U ——谷鸟吟晴日,江猿啸晚风
PAT A1031 Hello World for U首先根据题意模拟出字符串长度和n1,n2的关系(n2尽可能大,但不得大于n1),得到n1,n2后,可以仿照螺旋矩阵的填充方法将字符填入n1行n2列的二维数组(空位初始空格)#include<iostream>#include<string>#include<vector>using namespace std;vector<vector<char> > vv;int ma原创 2020-07-12 13:42:22 · 77 阅读 · 0 评论 -
PAT A1122 Hamiltonian Cycle ——春至花如锦,夏近叶成帷
PAT A1122 Hamiltonian Cycle题目要求的这种cycle是一个经过了所有顶点的简单环路,应该可以理解为序列应包含N+1个元素,首尾元素相同,其余的元素只出现一次,且整条路线是能走通的手抽用了vector作visited数组,每次判断一个序列都需要初始化,用以前的fill方式报编译错误,用resize好像跑到了奇怪的地方,无奈只好用for循环初始化。。。原因尚未研究#include<iostream>#include<vector>using na原创 2020-07-12 12:38:22 · 110 阅读 · 0 评论 -
PAT A1118 Birds in Forest ——云收雨过波添,楼高水冷瓜甜
PAT A1118 Birds in Forest较为友好的并查集,每个输入行先看成一棵树,本行出现的鸟用hash数组标记到这棵树上,如果hash[鸟]之前被标记过了,说明当前的树和标记的那颗是同一棵树,把两个union一下。最后数树的时候看有几个根节点(没有爸爸的)即可因为还要求判断两只鸟是不是一棵树上的,需要用hash[鸟]去findfather,所以需要压缩路径否则会超时——当然是超时了才去压缩的咯#include<iostream>#include<vector>原创 2020-07-12 11:00:32 · 111 阅读 · 0 评论 -
PAT A1116 Come on! Let‘s C ——阴阴夏木啭黄鹂
PAT A1116 Come on! Let’s C输入的时候判断其获得的奖项,并存入hash数组hash为零则是混进来的,另用一个checked数组标记获奖者有没有被查询过#include<iostream>#include<vector>#include<string>using namespace std;#define MAXSIZE 10010string awards[] = {"Mystery Award", "Minion", "原创 2020-07-12 09:58:10 · 116 阅读 · 0 评论 -
PAT A1114 Family Property ——柳庭风静人眠昼
PAT A1114 Family Property跟鸟和树、人和爱好的题目都差不多,但是因为多了统计值,产生了一些麻烦首先每行可以先看成一个家庭,本行出现的所有ID都属于这个家庭,给ID做hash数组,首次遇到一个ID时,标记从属于当前家庭,之后再遇到她就说明应该跟之前标记的那个家庭union到一起。这样输入完成后就得到了最终的father数组(根节点可以直接辨认出,其他节点的father就是对应的根节点,没有中间层)本来想在输入循环中直接把统计搞定(财产累计到根节点,hash数组也标记成最终的根节原创 2020-07-12 09:47:37 · 92 阅读 · 0 评论 -
PAT A1109 Group Photo ——连雨不知春去,一晴方觉夏深
PAT A1109 Group Photo输入保存身高和名字,排序;计算每排多少人,最后一排的人数注意一下然后从最后一排开始,先找中间位置放人,然后左边一个、右边一个直到放满#include<iostream>#include<vector>#include<string>#include<algorithm>#include<cmath>using namespace std;struct People{ str原创 2020-07-12 08:45:45 · 152 阅读 · 0 评论 -
PAT A1108 Finding Average ——和羞走,倚门回首,却把青梅嗅
PAT A1108 Finding Average这里的判断只做了一些基本的限制(正负号、每一位是不是数字、小数点的位置和数字的范围),还好测试用例也没有过于丰富的想象需要注意当有效的数字个数为0和1时的特殊输出#include<iostream>#include<string>using namespace std;int main(){ int num; cin >> num; int err_cnt = 0;原创 2020-07-11 10:23:12 · 136 阅读 · 0 评论 -
PAT A1106 Lowest Price in Supply Chain ——听取蛙声一片
PAT A1106 Lowest Price in Supply Chain跟之前的供应链题目是一样的,这次找的是最低价格,所以可以层序遍历,最先遇到的叶子就是价格最低的(层数最少),因为还要求数相同低价的个数,所以不能直接break,还要耐心把这层看完,计数本层的叶子数。当队列吐完,本层结束,while也结束#include<iostream>#include<vector>#include<cmath>#include<queue>us原创 2020-07-11 09:47:28 · 112 阅读 · 0 评论 -
PAT A1105 Spiral Matrix ——黄师塔前江水东,春光懒困倚微风
PAT A1105 Spiral Matrix转圈圈太可怕,想不出来怎么搞,参考了一下,选择了自己比较容易理解的方案设置上下左右四个边界值(都是可到达的下标),每次填一圈四条边,然后修改边界值和i j,注意剩下一个数的情况要特殊处理求m n的时候,如果是先找大的,开根号后需要向上取整,否则可能求出了小的那个#include<iostream>#include<vector>#include<algorithm>#include<cmath>原创 2020-07-11 09:22:01 · 214 阅读 · 0 评论 -
PAT A1104 Sum of Number Segments ——如果清醒是种罪
PAT A1104 Sum of Number Segments想法是将数字一个个加入序列,当第i个数字x加入时,会产生i个新的序列,这些序列由i个x和上一次新产生的序列组成。所以用tmp记录上一次新产生的和,再添上这一次的i个x,形成本次新增的,累加进total看了书上和柳神写的,有点像数PAT那个,对于第i个位置的数,所有包含她的序列的起点有i种,终点有n-i+1种所以每次给输入i(n-i+1),然后累加就行了,更加高级,不容易犯错另外感谢柳婼姐姐的update,否则第三个原创 2020-07-11 01:11:59 · 170 阅读 · 0 评论 -
PAT A1100 Mars Numbers ——满地黄花留不住 那一个赶考的书生
PAT A1100 Mars Numbers做了字符串和数字的双向映射,然后就是判断是数字还是字符串,然后做相应的转换或切割同样注意cin和getline同时使用时结尾回车的问题以及当数字是13的倍数时,火星文的个位0(tret)不输出,并处理空格和换行#include<iostream>#include<string>#include<unordered_map>using namespace std;string toMars1[] = {"原创 2020-07-11 00:44:25 · 129 阅读 · 0 评论 -
PAT A1096 Consecutive Factors ——衔春的燕想归巢
PAT A1096 Consecutive Factors20分的题做成了25分的样子,且尚有测试点3不知道错在哪里。。。首先想的是找到所有的因数(sqrt(N)内找所有的,如果有比sqrt(N)大的,只会有一个),然后在挑出来的因数序列中找连续的最大长度,此时我便犯了一个错误 ——这个最大序列可能并不符合因式分解,比如12、48那么我仍然需要在过程中判断此时乘积的状况,如果乘积超过了N,则需要把本段的左端点右移一位,从新开始后来看了书上和柳神blog,大家的普遍做法是两层fo原创 2020-07-10 22:55:33 · 138 阅读 · 0 评论 -
PAT A1115 Counting Nodes in a BST ——酷暑天,葵榴发,喷鼻香十里荷花
PAT A1115 Counting Nodes in a BST非常正直的题目,输出BST最后两层的节点数。先建树,然后bfs或dfs记录每层的节点数(dfs不需额外的数据结构),并找出最大层数。#include<iostream>#include<vector>#include<queue>using namespace std;struct Node{ int data; int left,right;};struct Res原创 2020-07-09 08:57:26 · 136 阅读 · 0 评论 -
PAT A1103 Integer Factorization ——如果你愿意一层一层一层的剥开我的心~
PAT A1103 Integer Factorization此题简单的描述不禁使我浮想联翩,质因数分解啦,几次方再求和怎么处理啦,遍历的范围和定位啦。。。最后终于步入正轨,应该先把N范围以内的K次方先放到数组里边备选,于是就变成了从一个有序数组中挑选M个数字使之总和=N(不是连续子序列有点可惜)。开始想用hash数组定位K次方数,从N开始倒着循环,搞到一半发现每个数都是可以取多次的,我这一个循环显然不行 ——感觉变成了完全背包了呦,可这个包我暂时还不会于是偷看了书上的,居然用的dfs。。。并且有理原创 2020-07-06 23:18:45 · 84 阅读 · 0 评论 -
PAT A1083 List Grades ——休说鲈鱼堪脍
PAT A1083 List Grades因为题目给了grade是互不相同的整数,所以用数组hash一下就相当于排序了注意点:1.for循环是g2到g1;2.if(vs[i].name != “”)#include<iostream>#include<vector>#include<algorithm>#include<string>using namespace std;struct Stu{ string name,ID;原创 2020-07-06 00:44:47 · 120 阅读 · 0 评论 -
PAT A1079 Total Sales of Supply Chain ——白头搔更短,浑欲不胜簪
PAT A1079 Total Sales of Supply Chain题目描述了一棵树,每往下走一层价格会上涨一点,最后从叶节点把货卖出去,所以就是找叶节点和记录层数,bfs或dfs或其他遍历都行,由于不久前dfs出了问题,这次惯性用了bfs最初的疏忽是n == 0时没写scanf,改后目前测试点1没过,网上看了一些,仿佛都没有遇到什么问题,只有一位同学说是这样每次累加price会损失精度,应该在最后一次性pow(1+r,level),我于是把结构体里的price换成level,只在叶节点pow,原创 2020-07-06 00:32:03 · 90 阅读 · 0 评论 -
PAT A1095 Cars on Campus ——一夜鱼龙舞
PAT A1095 Cars on Campus首先全部记录输入,这里出入转成了bool,时间转成了int。因为要搞in out配对,所以按车排序简单,然后一个循环筛出来有效记录。有效记录再按时间排序,然后就可以按照时间轴里in out的出现数数了。这里额外用了一个数组先存了输入,然后可以像两个数组头插法一样跑比较省心,主要是因为一时没想好边输入边跑怎么写本次存在的问题主要两个:1.为了珍惜时间用了scanf,导致不能直接输入给string,用char[]比较大小时经常就忘了strcmp,而且还原创 2020-07-05 20:55:51 · 87 阅读 · 0 评论 -
PAT A1102 Invert a Binary Tree ——花褪残红青杏小
PAT A1102 Invert a Binary Tree非常善良的题目,输入时交换所有的left和right,然后层序和中序输出即可#include<iostream>#include<vector>#include<string>#include<queue>using namespace std;struct Node{ int left; int right;};vector<Node> vn;原创 2020-07-05 00:20:08 · 85 阅读 · 0 评论 -
PAT A1076 Forwards on Weibo ——我不是归人,是个过客
PAT A1076 Forwards on Weibo此题本来没啥坑,用bfs记录层数并累加即可,然而之前写bfs记录层数是仿照姥姥讲的六度空间那个,貌似是用变量记录上一层的结尾值来控制level,但是dfs记录层数直接传参就行了,于是又一时冲动用了dfs(后来发现bfs也能同样用参数记录层数,只要在queue中push{序号,层数}的结构体就行了)。此题使用dfs就会遇到俩问题:1.正常的dfs每访问一个点就会置位相应的visited,之后这个点就变成了小小的窗扉紧掩,众人见到都会绕道而行,但事实上原创 2020-07-04 15:29:26 · 98 阅读 · 0 评论 -
PAT A1153 Decode Registration Card of PAT ——凭谁问,廉颇老矣,尚能饭否
PAT A1153 Decode Registration Card of PAT今天选的题目真是*&^%$#*,不但不值钱,搞起来还相当麻烦思路就是输入的过程中根据查询条件映射和排序好所有需要查询的数据。第一个就是PAT分给3个vector去排序;第二个用map(或数组)映射每个site的总分和人数;第三个是map套map映射每个日期中每个site的人数,这个东西因为输出时还要排序,而map仿佛不能用两个维度排序,所以用一个map套vector接过来去排序本来过程就有些曲折,搞第三个时想到原创 2020-07-04 00:59:30 · 103 阅读 · 0 评论 -
PAT A1062 Talent and Virtue ——西北望长安,可怜无数山
PAT A1062 Talent and Virtue按要求梳理好排序的项目cin cout with string大失败#include<iostream>#include<vector>#include<algorithm>#include<cstring>using namespace std;struct People{ char ID[10]; int virtue; int talent;原创 2020-07-02 17:52:26 · 108 阅读 · 0 评论 -
PAT A1091 Acute Stroke ——帘卷西风,人比黄花瘦
PAT A1091 Acute Stroke题不太好读,比较吓人的样子,然而方法就是存入三维数组,然后对每一个没有访问过的点1做bfs(扫描上下前后左右的1入队),如果本次bfs的cnt值>=T,则累加入结果注意想好visited置位和cnt++的时机,否则就会多算或者少算,调试也比较麻烦把visited也弄成三维的,q里面push三维坐标的结构体应该能节省一些脑细胞#include <iostream>#include <algorithm>#include原创 2020-07-02 17:45:14 · 90 阅读 · 0 评论 -
PAT A1092 To Buy or Not to Buy ——自在飞花轻似梦,
PAT A1092 To Buy or Not to Buy第一个串中元素进入hash数组并计数,第二个串中元素与数组消消乐,如果有消不掉的则cnt++。如果结束后cnt不为零则no,否则yes去数组里数数#include<iostream>#include<vector>#include<string>using namespace std;#define MAXSIZE 256vector<int> shot;string inp原创 2020-07-02 17:26:05 · 105 阅读 · 0 评论 -
PAT A1141 PAT Ranking of Institutions ——昨夜西风凋碧树
PAT A1141 PAT Ranking of Institutions中间计算TWS时不能使用int,否则最后一个测试点不过。但是比较和输出又需要用int,在里面强转int也不给AC,无奈只好先用double算,然后for(int i = 1;i < idx;i ++) vs[i].TWS = (int)vs[i].DTWS;。。。#include <iostream>#include <algorithm>#include <string>#in原创 2020-06-30 11:58:29 · 105 阅读 · 0 评论