去年受到疫情的影响,绝大多数保研活动都是线上举行,因为对人力物力的消耗较大,很多学校取消了机试的环节,这令许多不擅长写代码的同学深深松了一口气。
但是仍有许多重视机试的学校保留了上机的考察,其中包括华东师范软件学院,北航计算机学院、浙江大学软件学院等等,这几个学校的这些学院对机试一直很重视,而且题目难度一直较大,由此可见,想要去到好的学校门槛不会因为任何外力所改变,而且2021年保研时,疫情大概率会得到有效控制,有很大可能线下举办,也就是说很有可能有上机考试,那么对于两年来没训练过机试的学生来说,如何上手准备呢?
首先是熟悉了解机试的规则以及常见题型划分,机试大多学校采用c编程,有些学校允许c++,有些可以使用stl,还有学校已经允许java和python了,不过最保险的还是使用c。还有就是输出格式一定要严格参照要求,无论是人工还是oj评判,格式错误就相当于用例没通过。
题型划分的话,《王道机试指南》这本书总结的已经很全面了,记忆中涉猎较少的是字符串的问题详细总结,这类问题也是较为常考的但是题型又比较杂,可以去知乎查一下leetcode字符串-思路与解法分析,会有很多大佬总结常见题型,解题思路以及题目链接,回到王道指南,以自身经验为例,最常考的问题是搜索、数学问题、动态规划。
搜索也就是DFS和BFS,数学问题进制转换是较为普遍的,动态规划我理解的就是把从上而下的求解过程转为从下而上的转移求解+用记忆矩阵存储每个状态的值,最长递增子序列和最长公共子序列这类问题较容易,可以应付简单机试,较为复杂的背包问题那一大类,我没有考到过。个人认为看书时最好按照考到概率顺序来准备,对于数据结构图和树这类问题,考察概率相对较小,毕竟用纯c写的话,写个树和图就很麻烦了。
其次是分清轻重缓急,刷题以及机试,讲究的性价比,而不是突破自己,比如你花一天搞懂KMP算法,马拉车算法,但是它被考到了概率仅有千分之一,还有一些复杂的DP算法,对于一般学生来说不需要深入训练,扎实拿下基础题的所有分比拿下一道难题容易许多。
然后是刷题平台和数量,平信而论,保研相较于找工作刷的题目数量以及难度都是九牛一毛,以leetcode为例,基本常见题型中等难度就足够了,简单题型也要刷,一是为了考察自己逻辑能力,考虑问题的缜密能力,而是提升做题速度,提高代码敏感度。
对于中等题目,有些还是比较考察脑力,但是简单题更考察基本功。我当时刷了浙大mooc对应的PTA习题,leetcode刷的相对较少较简单,一共100道题左右,刚开始刷的时候的确非常痛苦,leetcode强大的测试用例,总是能暴露出各种各样错误,我建议在一道题上不要浪费过多时间,开始最多一个小时,还能通过的话,去网上搜一些解题思路或者看看discussion,整理思路再写,代码千万不要复制粘贴,一行一行敲,这样才能提升能力。
最后如果对自己要求较高,想要去进一步证明自己的算法能力,那么我建议去考一些认证或者参与一些算法类竞赛,因为有些学校的机试相对较容易,不足以说明你的实力,ACM相对较难,有一些认可度较高的,难度不大的比赛可以考虑,比如:ccf、PAT、蓝桥杯、全国大学生互联网软件设计大赛、天梯赛等等,对于追求较高的同学,可以留意考虑下。
大概就那么多了,寒假来临,可以安心刷题了!