PAT备考经验&相关信息[通俗易懂]

在9月8号下午的PAT考试中,我幸运的拿到了满分,用时1小时45分钟,排名第五,算是成功迈出了转专业的第一步。按照惯例应该嘚瑟一波,然而身边并没有人考这个,转念一想,不如把考试日志和备考经验教训记录下来,以期看见此文的后来者能少走一些弯路,更加高效的刷题学习(虽然可能并没有人能看到 _(:△」∠)_)。当然,在科班大佬面前我只是个尚未入门的弱鸡,因此这篇经验主要针对有意转行/业余爱好编程/基…

大家好,又见面了,我是你们的朋友全栈君。

在9月8号下午的PAT考试中,我幸运的拿到了满分,用时1小时45分钟,排名第五,算是成功迈出了转专业的第一步。按照惯例应该嘚瑟一波,然而身边并没有人考这个,转念一想,不如把考试日志和备考经验教训记录下来,以期看见此文的后来者能少走一些弯路,更加高效的刷题学习(虽然可能并没有人能看到 _(:)_ )。

当然,在科班大佬面前我只是个尚未入门的弱鸡,因此这篇经验主要针对有意转行/业余爱好编程/基础薄弱的朋友。

作为第一次在网上写东西的语文渣,我已经预感到本文会比较乱,所以先把打算写的几个部分列出来:一是针对PAT的备考要点,二是刷题过程中可能走的弯路和遇到的坑,三是PAT考试流程和注意事项,四是PAT的相关信息和数据统计简介。另外还准备写一篇解题报告,主要是考试时的思路和AC代码。

一、PAT甲级备考要点

甲级题目的思考量都是不大的,主要是考察对数据结构基础知识的掌握和基本的编程能力,换言之,能否拿高分,和天分无关,主要取决于付出的时间和精力(满分往往还需要一点运气)。在学习和刷题过程中,半天做不出一道、找bug找到怀疑人生什么的太常见了,一定坚持下去,一段时间后你就会发现自己的进步~好,接下来说说备考要点,首先要具备c&c++和数据结构的基础,然后:

1、刷通甲级题库,并且关于树和图的30分大题尽量做两遍。这是最稳妥最有效的方法,甲级考题也常常会以题库里题目的改编形式出现,如这次的2、3、4题都可以在题库里找到相似的。另外,以前刷微博的时候看姥姥说过,甲级题库里有一些早期的保研机试题是超纲了的(比如涉及到动态规划的题目),而甲级真题是不会超纲的,所以,如果时间紧张,优先做考纲内的题,动态规划等超纲内容了解思想即可。

2、强烈建议配合晴神宝典(即《算法笔记》,胡凡、曾磊著)刷题!!这本书我只能说相见恨晚,可以帮助非科班人士节省大量时间,而且要优先学习STL,非常强大非常实用。

3、开一个记事本,记录自己常犯的编程错误和考虑不周之处。因为把“==”写成“=”之类的错误而浪费一下午简直令人崩溃,而记下常犯的错误则能辅助自己快速纠正错误习惯。尤其是对于新手,“我觉得我会做”和“我真的能AC”之间差了十万八千里,唯有脚踏实地多写多总结才能提高。

4、AC不了不要死磕,去找大神的博客学习吧。比如柳神的题解就都很厉害。

5、在学习大佬博客的时候,你可能会发现某些题你不会做是因为你不会某些算法,比如dijkstra+DFS,这时可以去翻晴神宝典,动笔or敲键盘写一遍模板,然后设个备忘过几天回来再做。这样会记得比较牢。

6、其他一些小tips:“二指禅”的朋友建议练习一下标准指法和盲打,盲打编程比低头抬头的敲键盘舒服很多;因为考场都是台式机,所以练习的时候最好买个大键盘,而且大键盘打字速度也更快;去官网找到考场编译器,下载相应编译器并练习,用Dev-C++的话注意记住使其支持c++11的操作。

PS:以下两个坑希望大家在刷题前注意一下:1)甲级1029,题干中说数据范围是long int,但实际上测试数据都在int范围内,由于内存限制,按long int写是过不了的。(更正:这里是我理解错了,实际上,long int 不是 long long。古老的C语言有short int和 long int,现在 int 就默认为是 long int。)   2)甲级1108,像1.之类有小数点但没有小数位的数据是合法的(做完这题后建议学习一下sscanf和sprintf函数)

二、我的学习过程和走过的弯路

我是电气工程专业的,所以老老实实的学过一年c++,也水过一学期的数据库。尽管如此,在今年3月学习MOOC上浙大的数据结构时也被虐的很惨。而且那个时候主要把考研作为一个备选念头,只是单纯的加了考研群和以课外拓展的心态学习数据结构,效率极度底下,现在回想起来,真是又把大好时光喂了狗。。。总之,编程入门很可能比想象的难,放平心态,但也要给自己一点压力,写代码尽量限定时间。

有了C++和数据结构的基础后就只剩刷题了。但不要自己闷头刷和死磕,尤其是连STL都不会用的时候。我7月份平均下来每天刷题大概两小时,但是只做了20几道,知识储备方面也只有看别人题解和博客学到了一点零碎的STL及字符串处理知识,可以说是把大量时间花在了无用功上。

到了八月,无意中翻看了晴神宝典,当时就感觉“哇!这就是我想要的!”(感觉像推销哈哈,但真的就是这种感觉!)。然后连续几天学习了STL、dijkstra+DFS、动态规划和字符串处理,然后做题速度直接就质变了= =八月份压力比较大了,每天花一个下午做4题的样子,时间控制在三小时,但是因为做完题基本不想干其他事了,所以每天都是奉献了一下午给PAT的,限时限量后明显感觉自己的编程基本功在慢慢变好。这个阶段最后悔的就是太喜欢死磕,总觉得题要自己做出来才行,看别人的就不算数了,于是好些晚上都对着屏幕,头晕眼花的找下午没有AC的题目的bug。其实死磕这种题真的没有意义,太浪费时间,等慢慢有了更多积累再回头看自然而然就会做了。(当然也有例外,1026我留到最后做的,结果怼了一整天也没成功,最后百度大佬的解题报告后又改了一晚上 _(:)_ 

总结一下:

其实就是初学者要以学习为主,应该把时间主要花在知识的积累和对他人优秀思路的学习上,而非总是自己闷头搞个又丑又笨的解法,只有先积累到一定程度才能思考出好的方法。

以及,有压力才有效率,做题要限时定量。

最后,学习要系统化,这里再次推荐晴神宝典(感觉自己要变成小迷弟了= =)

三、考试流程及注意事项

这个地方简单提一下,毕竟很少有人会在考试中出问题,但总是有出各种状况的。。。

我参加的这次考试流程大致如下:提前15分钟进场,检查准考证,签到,做到指定位置。老师已经帮忙开好考试的页面了,不许自己再开其他浏览器,不然会被截屏并算违纪。等开考时间到了点击进入题库就可以答题了,开考前不要点进去,不然你看不到题目但是会计算考试时间。

因为企业在看你成绩的时候还可能考虑你的提交次数,所以,提交前最好检查一遍。

PS:我在的考场出状况的同学有:迟到、没带准考证、看到电脑息屏不是摇摇鼠标而是直接重启、踢到电源线导致重启。毕竟交了150+,大家还是要认真点对待啊。

PAT对时间和内存的限制一般很宽,所以只要大方向是对的,就不用太在意优化代码了。实际上,大多数题目你正常做耗时在限制的1/4以下。而且,很多题都是直接暴力解决就好了,要是想不到好方法,就暴力枚举吧,说不定直接就AC了呢?

四、PAT的相关信息和数据统计

PAT考生主要分为找工作党和考研党(甲、顶级可抵浙大考研机试),也就是说,除了极少数可能存在的来玩的大佬,甲级大多考生为普通选手,以及1/3左右的捐款选手(据说每次都有1/3左右的0分,估计是交了钱弃考了)。

以下统计了近几年甲级的考试人数、满分人数、对应习题集的习题:

时间 2015.3 2015.9 2015.12 2016.3 2016.9 2016.12 2017.3 2017.9 2017.12 2018.3 2018.9
甲级人数 468 659 276 532 622 271 973 1207 464 1459 2237
满分人数 42 26 43 21 42 19 161 59 9 56 49
满分率 8.97% 3.95% 15.58% 3.95% 6.75% 7.01% 16.55% 4.89% 1.94% 3.84% 2.19%
对应习题 1092-1095 1100-1103 1104-1107 1108-1111 1116-1119 1120-1123 1124-1127 1132-1135 1136-1139 1140-1143 1148-1151

此外,2018年考研机试情况如下:去年浙江大学计算机类专业考研进入复试有235人,其中118人选择使用PAT成绩代替机试成绩,这118人中有27人满分。最终,机试三人缺考,满分48人,平均分78.43,因为强军计划比较特殊,除去这一部分考生的话机试平均分80.18。

五、关于考纲

考纲里要求掌握的算法为:哈希映射、并查集、最短路径、拓扑排序、关键路径、贪心、深度优先搜索、广度优先搜索、回溯剪枝等。

哈希映射:一般会用map和unordered_map就好。此外,比如说题目固定了关键字为4个大写字母,那么可以把关键字看成26进制数,这样就能把字符串转换为int型数据处理,提高程序运行速度。当然基本概念也不能忘,解决哈希冲突的基础方法要理解,包括开放地址法(线性探测、平方探测)和链地址法(开放定址法)。

并查集:主要就是掌握findfather函数(找到某节点所在集合的“根”)。压缩路径的函数如下:

int findfather(int a){
  if(a!=father[a]{
   father[a]=findfather(father[a]);
  }
  return father[a];
}

最短路径:主要掌握dijkstra+DFS。如果出现了负边权,就用bellman-ford(尚未考过)。

拓扑排序、关键路径:可以做做PTA上的 Data Structures and Algorithms (English)题目集7-12和7-18,数据结构与算法题目集(中文)7-11。

贪心:考的很少。印象比较深的是甲级题库1033 To Fill or Not to Fill,挺难的。

DFS、BFS:算是必须掌握的基础了。

回溯剪枝:就记得甲级题库里的1103了,不过因为内存限制放的宽,用动态规划暴力做也可以。

此外,AVL树的插入删除要会写。

根据树的各种遍历方式构建二叉树经常考到,最好熟练掌握。

堆的构建、删除、插入要会写,即“自顶向下”和“自底向上”调整堆。

最后,关于最小生成树和动态规划,这两个都是顶级的内容了,基本不会考,但是思想并不复杂,多学一点总是好的,学有余力建议了解一下。动态规划甲级题库有好几道,背景都很经典;求最小生成树用的是贪心算法,可以做下PTA上数据结构与算法题目集(中文)7-10,prim和kruskal算法都试试。只是简单学习的话还是很快的,也比较有意思。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/126442.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Could not retrieve transation read-only status server「建议收藏」

    背景最近在部署一套完整的项目,部署过程中遇到很多的问题,在来总结一些如标题的这个错误!环境说明: 使用分布式数据库,使用的是mysql!### Cause: java.sql.SQLException: Could not retrieve transation read-only status server; SQL []; Could not retrieve tran…

  • css规则定义的分类,CSS规则定义英汉对照表[通俗易懂]

    css规则定义的分类,CSS规则定义英汉对照表[通俗易懂]《CSS规则定义英汉对照表》由会员分享,可在线阅读,更多相关《CSS规则定义英汉对照表(4页珍藏版)》请在人人文库网上搜索。1、CSS规则定义英汉对照表一、类型font-family:字体font-size:字体大小font-weight:字体浓淡font-style:字体风格如:斜体、正常等font-variant:字体变量(用来设定字体是正常显示,还是以小型大写字母显示)line-heig…

  • osi七层模型各层功能简述(简述osi七层模型各层功能)

    读完本篇文章将会了解以下问题1.OSI的基本概念及原则2.OSI七层模型各层功能概述3.OSI七层模型举例4.OSI七层模型总结—————————————————————————————————————————…

  • 论如何用cmd命令做出数字雨特效「建议收藏」

    论如何用cmd命令做出数字雨特效「建议收藏」大家应该都看过《黑客帝国》这部电影,当时我就震惊了,那个数字雨特效做的太牛逼了!所以我趁着周末的休闲时间,略加研究,找到了用cmd做数字雨特效的方法,只需要三步:Step1首先,我们新建一个后缀名为.txt的文本文档,然后命名(其实命名都无所谓,你高兴就好),双击进入:Step2在里面编写代码:@echooff//这段代码是用来关闭后面的提示语句的titleqwedsazx890//这段代码是设置访问用户的,大可不必,写上也可以,”title”后面的

  • Hashtable 的实现原理

    Hashtable 的实现原理

  • 快速排序基本思路(通俗易懂+例子)「建议收藏」

    快速排序基本思路(通俗易懂+例子)「建议收藏」快速排序今天看到大神写的一篇快速排序的博客,肃然起敬,觉得原来快速排序这么简单下面进行简单的试试快速排序的基本思想是1、先从数列中取出一个数作为基准数2、分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边3、再对左右区间重复第二步,直到各区间只有一个数概括来说为挖坑填数+分治法下面举例来进行说明,主要有三个参数,i为区间的开始地址,j为区间

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号