今天考了18年9月份的PAT甲级考试,虽然成绩不理想,但是也给一个阶段划上了句号。有一些心得和反思,写给自己,也希望能帮助他人。
首先正确的认识PAT很关键:
如果你是考研的同学,如果成绩优异可以替换掉浙大的计院和软院的研究生复试的机试部分(据说其他的学校也有,这一点我不太清楚,可以针对具体院校咨询一下)。
如果你是工作的同学,成绩特别优异的话还是比较有帮助的,但是也不要过分的夸大这个考试,因为考试的总体难度不高,PAT对外宣称成绩优异是可以收到邀请的,但是也只是面试邀请,面试不仅仅会考察算法,技术面试还是主要针对你研究方向内的问题去提问的,如果这方面不够扎实也是不行的,其实如果你有考到接近满分或者满分的能力,直接去参加会给你发邀请的大厂的笔试也是可以通过的。所以不要过分看重这个考试的含金量,理性认识即可。(仅仅是个人关于甲级及以下考试的观点,如果是参加顶级的大神,另当别论)
如果你是在校同学,没有考研和工作压力,那么非常推荐你去,因为算法对于计算机学生来说是非常重要的,我个人现在是JAVA方向,今年在准备实习的时候因为算法不过关,在笔试阶段惨遭网易拒绝。其他的方向也是一样 ,就算你是前端也会考算法,这是一门基础课,大厂大企业比较看重基础知识牢固的同学。所以推荐那些没有各种压力的同学去考一下,算是对自己学习算法的一些督促,并且尽量考甲级,个人感觉不是特别难,这次的题目都会只是时间不够充裕决策也有问题(这个下边会讲)。
前期准备:
准备PAT考试有一本公认的教材名叫《算法笔记》,就是下边这一本。
只要跟着书和配套练习题一章一章的学,基本上知识点就全部掌握了。
然后就是多刷一刷题目巩固知识点,pat官网上的题库就可以,到我写这篇文章的时候是151道题目,算法笔记只收录了前107道题目结合知识点进行讲解,在我刷题的时候只有147道,最新更新的四题也就是我们刚刚考试的四道题目。前面的不敢保证,后边的基本都是历次的真题了,可以在刷完书之后找一组(四道题,分值分别为 20、25、25、30)模拟一下。
准备时间:
推荐两个月吧,如果没有数据结构算法基础的可以适当延长,但是感觉两个月已经很充裕了,一定要监督自己,规划好整体计划和每一天的计划,克服拖延和懒惰。计划的话看个人能力吧,网上有人说来回刷两遍肯定就100分了,但是我这个人不是很喜欢题海战术,整理也是很有必要的,不管是在错题本还是在博客上,写写思路然后反思错误也会有很大的提升。
前期心得:
这应该算是一个失败心得吧,我觉得我前期的规划不是很好,而且拖延症使我最后都没能刷完题目,付出了努力和收获不是正比关系但是至少也是正相关关系,很大程度的提升了你高收获的概率。希望我和有同样缺点的读者,都能克服这个问题。还有一点是,前期要注重训练自己找思路快速做决策的能力,找出解题做方便的办法,这次翻车有一部分原因也在于此。
需要带的东西:准考证(官网找到自己的准考证想办法打印)、身份证、笔。前两件是必须有的。
考试时间: 3个小时
题量:4个题目(分值分别为20、25、25、30)
我是在浙江传媒PAT考点考试的,比较幸运分到了电脑好一点的一体机教室,然后开始考试,就觉得键盘很难受,而且第一道题是一道关于狼人杀的题目,判断哪两个是狼人,当时还是有点紧张的,并且思路也没有规划好,导致开始的一个小时既没有AC掉第一道,还浪费了大量的时间。
看到已经过了一个小时,于是当机立断不做了,看下一道题目,第二道题目一下子就知道是什么样的思路,然后才静下心来做题,安静的AC了第二道,开始做第三道也很顺利,只不过有一个case没有过,扣了3分。
到了第四道题的时候还有一个小时多一点,第四题的思路也很清晰,因为是要构建二叉树,然后再寻找给出的两个key的第一个共同的祖先。我当时脑子里第一反应是静态树很方便,因为比较大小就可以了,然后较大的除2,直到两者相等就可以求出来了,看了一眼节点的个数,N <= 10000,这时候心里想只要开一个10010大小的数组就可以了。整个过程都进行的很顺利,给出的样例测试也通过了。
提交,显示后三个case段错误,也就是越界了,当时反应是看看是不是特殊值导致的,检查了一下没有。于是检查哪里有数组访问,逐个检查后发现可能在根节点下标在5000以上的时候使用 2 * r 和 2 * r + 1 访问他的子节点有越界的风险。于是增大数组并且加了一些判断语句。提交仍然错误,重新分析题目,突然想到如果使用静态树,建立的树恰好是那种完全偏斜的树,就是100个节点的树,每个节点只有左子树这种。那么第100个节点的下边就应该是 !一个完全不能被整型或者长整型接受的下标。
方向完全错误了,这个时候只剩下了半个小时。决定放弃修改,试试第一题还能不能抢救,然后尽力做第一题,只把特殊的no solution解出来了,然后考试结束。
有点失败。
考试小技巧:
考试的时候浏览器界面右键没有复制选项,而且我不小心点到右键的时候还会有点卡,所以如果复制示例的话请使用Ctrl+C。
将示例输入到控制台有两种方法,
1.将输入输出重定向:
freopen("D:\\input.txt","r",stdin);//输入重定向
freopen("D:\\output.txt","w",stdout);//输出重定向
使用freopen函数将输入输出重定向到D盘中的两个文件,这样只要在input.txt文件中粘贴示例即可在output.txt文件中查看结果。当然还有c++的fstream可以使用,如果同学们有兴趣的话可以自行查阅。
2.如果不喜欢用(比如我),或者考试一着急忘记了这个语句怎么写,可以使用这一种方法。在我考试的时候使用的编译器是codeblocks,但是当我复制示例之后发现使用Ctrl+V的时候是粘贴不出来的(显示^V),这时别急在控制台的白色框上右键:编辑—>粘贴 即可。
考后心得:
1.第一道题大多数是数学问题,如果没有思路的话不要硬头皮去做,可以看看后边的题,因为后边的肯定会有树、图之类的题目,这些题目的思路会比较清晰,而且难度也不会很大,放松心态、让自己进入状态很关键。
2.键盘可能不顺手,但是还是那句话,别让次要的点总是吸引你的注意,静下心来思考题目。
3.注意把握时间,3个小时规划好,不要铁头去做一道题,最大程度的去拿分。
4.想好思路之后再仔细考虑一下是否合理,因为思路确定之后如果在修改将会耗费更多的时间。
5.做好考前准备,如果你准备足够充分,即使条件再不利,发挥的也会比一般人好,当你的水平特别高的时候,应试技巧就不是那么关键了。
另外一些的友情提醒:
希望大家在考试中减少一些自己的小习惯,比如频繁的叹气和自言自语之类的,示意老师的时候也尽量轻一点,因为这可能会影响到你旁边的同学,如果你旁边的同学还没来状态的话,估计会恨死你,O(∩_∩)O哈哈~
希望大家都能学好算法,都能在PAT考试中考出好成绩。
如果你是过来人有一些什么经验,也可以在评论中分享给大家,谢谢~