Skip to content

五. 作为一个零基础转p的个人建议

前排提醒

不同水平的人对于转专业的难度有着不同的评价,因为整个转cs指北都是笔者一个人写的,所以不可避免地会存在很多主观/片面内容

包括下面的内容完全是照着自己的经历去写的,如果你问我“你是怎么转专业的”,我会按照下面的内容去回答

其他人会给出各不相同的答案,我只能给出我的答案,仅供参考

转专业机试对于零 OI 基础的学生来说是完全陌生的,个人认为无基础的同学至少需要投入一整个学期的课余时间来进行充分的学习

这里推荐 OI Wiki 这个网站,它可以作为你开始接触 OI 的知识性平台。在了解了相关的知识之后,你需要进行充分的机试题目练习

转专业机试的难度可以参考 Div3 难度的线上 OI 比赛,各种 OI 平台都有比较优质的比赛举办,比如 Codeforces Luogu AtCoder 等等

LeetCode 对于转专业机试练习我不是很推荐,因为 LeetCode 做题提交函数而不是完整程序,并且题型也不是很像

学算法真的需要大量题目练习,比如说 “用较短的时间解决一道算法简单的题”(对应 24 级机试第一题,只使用简单的贪心思想即可解决的题目) “看到一道有关动态规划的题目能够列出转移方程” (对应 24 级机试第二题,需要很强大的动态规划掌握能力)“能熟练地实现图论的相关算法的完整框架” (对应 24 级机试第三题,需要掌握理解最短路算法并进行修改),这些能力都需要理论学习+上手实操

机试第一题大概是洛谷橙的难度,在20min内有过半的考生拿了满分,事实上直到交卷也有人没写出来第一题

机试 AK 很难很难,但是机试的每一题有详细的测试用例说明(部分分构成),即使你在考场上想不出正解也应该尽量得部分分:能写出暴力解就写暴力解拿部分分;看到某些特殊样例有针对性的特殊解法就针对那一部分样例拿部分分;打表 / Hardcode 也都是允许的。不要为了追求正解而放弃这些听上去是 “歪门邪道” 的操作

就拿 24 级机试为例,总共三道题,后两题都仅有一人拿到单题满分,排名区分就体现在部分分的争取上了

第二题有 30 分的特殊数据存在非常简单的解法;3000ms的时限(三倍于其他题目)也能让完全暴力的程序拿到一定分数

第三题敲出裸的 Floyd 模板就能拿到 30 分,进一步针对题目改进就可以获得很高的分数(80分左右);经过剪枝优化的 BFS 暴力解实测甚至可以获得 40 分



· 对于大一的五门专业准入课,《计算机程序的构造和解释》与《数字逻辑与计算机组成》作为 “很cs” 的两门课都建议去选课学习。这两门课分别可以类比UC Berkeley的 CS61A 与 CS61C ,都是非常优质的课程,而我们学校的《计算机程序的构造和解释》更是较为完美地复刻了CS61A这门课,非常有听一听这门课的必要(哪怕因为一些原因选不了这门课,也可以申请账号跟学)。《数字逻辑与计算机组成》虽然课堂上学起来很枯燥很硬核,而且 Logisim 实验做起来也很煎熬,但是真的啃一两遍书下来,会对计算机的CPU设计有一个更加深入的体会

《数字逻辑与计算机组成》这门课如果选择在大二上学期学习,会和另一门课程内容庞大的课程《计算机系统基础》一起压榨大二上学期的学习精力。这两门课都很耗时间,所以不建议在同一学期去学,因此我建议在大一下学期就选择《数字逻辑与计算机组成》

当然这门课因其难度性,有总评 < 80 的风险,考虑到转专业的硬性条件自身做好权衡

以及我好遗憾没有选SICP这门课(T_T)



· 对于一层次数学课,一定要认真对待作业,认真对待往年卷。大学数学这种内卷程度与分数基本呈正相关的课程所占学分还挺多,对 GPA 有显著影响。你可能会发现有同学怒刷十余年的往年卷,把《大学数学典型题解析》写了个透彻,个人认为在真的去用功学习这个前提之下,刷题真的可以提高分数(体现在熟练度和正确率这两个要素)。当然死刷题作用不大,你可以参考高中数学的正确学习方法

好消息是:刷题正相关于考试分数的课程在大学不多,更多专业课的成绩正相关于对知识点的理解深度与广度(你会发现像 SICP 这样的课有着很高的平时分/作业分比例,那不是方便你通过各种手段拿高分的,而是真正证明你的学习水平的)



· 不要因为身边大神云集而否定自己;不要被绩优主义压弯了腰;不要在转专业考试的前夕选择悲观

转专业不是人生的急转弯,只是一条分岔路。

笔者的 GPA 在转入cs后处于后 50% 的位置,有点sad,因为佬真的好多 (;′⌒`)