ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

中大保研机试备考指南:题型分布、评测规则与高频算法全解析

中大保研机试备考指南:题型分布、评测规则与高频算法全解析 写在前面的一个实在提醒所谓历年真题绝大多数是回忆版别把它当成官方标准答案。你要是去网上搜中山大学保研机试真题能看到的基本都是往年参加过机试的同学出来之后的回忆贴题目大意正确但数据范围、边界条件、判分方式这些细节经常对不上。我自己当年准备的时候就有过这样的困惑复习了一道原题结果考场上一看细节差了很多差点被带偏。所以这篇文章我想换个角度不给你整理那些真假难辨的题目清单而是把历年中大保研机试里真正稳定的那些东西讲清楚题型怎么分布、难度梯度在哪、评测规则有什么坑、近几年的命题风格在怎么变、以及最重要的——怎么利用这些信息规划自己的备考路线。这些东西比背几道回忆版题目有用得多。如果你是计算机、软件工程、人工智能相关专业准备走保研这条路目标里有中大那这篇文章就是冲着你写的。就算你考的不是中大里面关于机试备考的思路和避坑经验也基本通用。1. 中大保研机试的游戏规则不知道这些刷再多题也白搭很多同学准备机试第一反应就是埋头刷题。但说实话我见过太多刷题量不小、最后机试却翻车的人原因往往不是算法不会而是压根没搞懂这场考试的规则。你既然是在准备保研机试拼的不是会不会写代码而是在规定时间内、规定的环境里、按规定的输入输出格式把题做对。这几个规定就是游戏规则先把规则吃透再谈战术。1.1 考试环境与评测方式Linux、黑盒测试、严格判分中大保研机试一般是在学校自己的OJOnline Judge系统上进行的不同年份用过的系统不完全一样但性质都是标准OJ评测。这意味着什么意味着你的代码不是给人看的是给机器判的。黑盒测试评测系统只关心你程序的输入输出不关心你代码怎么写的。你程序跑出来的结果和标准答案完全一致才给分不一致哪怕你的思路是对的也是零分。多组数据测试一个题目的判分不是跑一组数据而是跑多组通常会有几十上百组。你哪怕只错了一个边界条件导致一组数据没过这道题可能就只拿部分分甚至零分。严格的时间和内存限制每道题都有时间限制一般1秒到3秒和内存限制一般128MB到512MB。你的算法复杂度太高跑超时了直接判超时不给分。我当年第一次在OJ上做题写了个循环套循环的暴力解法自己电脑上跑得挺快一提交全是TLE超时。后来才明白OJ评测机的性能和判题逻辑跟自己电脑完全不是一回事。注意评测机是Linux系统跟Windows环境有不少差异最常见的就是int范围、printf和cout的性能差异。后面备考部分我会详细说这里先有个意识。1.2 考试时间与题目数量4到6道题3个小时根据历年参加过机试的同学反馈中大保研机试的时长一般在2.5到3小时题目数量在4到6道之间浮动。题目数量看起来不算多但别高兴太早因为难度梯度非常大。以近几年的情况来看题目结构大致是这样的题号大致难度考察方向预估通过率第1题简单模拟、基础数学60%-80%第2题简单偏中字符串处理、简单数据结构40%-60%第3题中等搜索、动态规划基础20%-40%第4题中等偏难图论、区间DP、复杂搜索10%-20%第5题困难综合算法设计、思维题5%-10%这个表格不是官方数据是根据历年考生的反馈大概估计的但足以说明问题机试不是一个做完所有题的考试而是一个尽可能多拿分的考试。你要是能稳稳做出前两道第三道拼一拼基本上就能超过绝大多数人了。1.3 编程语言选择C/C是绝对主力别拿Python赌命中大机试历年允许使用的语言以C和C为主部分年份可能允许JavaPython出现的概率很低。就算允许我也不建议你用。原因很简单评测机上Python的运行效率比C差一个量级而机试的题目往往卡常数、卡复杂度。同样一道题C的 O(n log n) 能过Python 的 O(n log n) 可能就超时了。再加上Python的大整数、递归深度这些问题在机试场景下全是坑。我见过有同学觉得自己Python写得快非要用Python考结果第一题大数运算就超时了。大数运算是Python的强项但OJ判题不是只看结果的正确性还看时间Python在大数上虽然方便但一旦涉及10^5级别的循环性能劣势就被无限放大。所以如果你的时间还来得及建议老老实实用C。如果你只会Python也不是说完全没机会但你必须在算法复杂度上留出比C多一倍的余量并且提前确认当年的机试是否允许Python。2. 从历年真题里看题型分布哪些题是基本盘哪些题是分水岭把规则搞清楚之后接下来才是真正的重头戏——研究题型分布。我花了不少时间把网上能找到的历年中大保研机试回忆版题目整理了一遍结合其他参加过机试的同学的经验总结出了下面这套分布规律。2.1 必考基础题模拟、枚举与高精度运算中大机试有一个非常显著的特点几乎每年都有一道跟高精度运算有关的题。什么叫高精度就是数字太大超过long long能表示的范围约9.2×10^18需要自己用数组或字符串模拟加减乘除。很多初次接触机试的同学不理解为什么都9102年了还要考这种低级的东西其实高精度考的不是高精度本身而是你对数据范围的分析能力。题目不会直接告诉你请用高精度而是给你一个看似简单的计算题你写着写着发现long long溢出了才意识到必须另想办法。这就是在考察你的工程思维——能不能预见问题并提前规避。我给大家一个典型的题目模型这类题在历年真题里反复出现输入两个不超过10^200的非负整数a和b输出a×b的结果。10^200这数字多大long long最大才9.2×10^18。你要是直接用long long接收输入数据都存不下必须用字符串读入然后模拟竖式乘法。高精度加法和乘法是基础中的基础我建议你不仅要会写还要能默写出来因为这类题是整套卷子里的送分题丢分太可惜。除了高精度模拟题也是基本盘。所谓的模拟题就是题目描述了一个过程你只需要按照这个过程一步步执行不需要什么高级算法纯粹考察代码实现的准确性。比如给一个日期计算它是星期几给一堆字符串按某种规则排序/去重给一个棋盘模拟某个棋子的移动路径。这类题目的特点是不需要动太多脑子但非常考验代码的细致程度。变量名、边界条件、循环条件任何一个地方出了错整个程序就跑偏了。我当年做这类题最大的感受是计蒜客上刷十道题不如认认真真手写一道完整的模拟题。2.2 区分度核心搜索与图论中档题里搜索和图论是绝对的主力。搜索就是DFS深度优先搜索和BFS广度优先搜索图论则包括最短路径、最小生成树、拓扑排序、并查集这些经典内容。为什么说这些题是分水岭因为基础题大家都会难题大家都不会真正拉开差距的就是这部分中档题。你能不能在考场上快速识别出一道题该用DFS还是BFS能不能把图论模型转化成代码直接决定了你的排名。以历年多次出现的迷宫问题为例给定一个n×m的迷宫0表示可通行1表示墙求从起点(1,1)到终点(n,m)的最短路径长度。这个模型一看就知道用BFS。但你需要注意几个细节第一迷宫的边界条件数组是从0开始还是从1开始方向数组怎么写第二访问标记的时机是入队时标记还是出队时标记这决定了会不会重复入队第三最短路径的记录方式有时候要输出路径本身不只是路径长度。我当年第一次写BFS的时候访问标记放在出队时标记结果同一个节点被入队了无数次复杂度爆炸直接TLE。这个坑提醒大家BFS的标记时机是基本功考试前一定要梳理清楚。还有一类高频题是最短路径变形。比如给定一个无向图每条边有长度和花费求从1号点到n号点的最短路径中花费最少的那条路的花费。这就是最短路径 第二权重的组合问题。解法是在Dijkstra的松弛操作里多加一个条件判断代码量不大但你得能想到这个思路。很多同学一看到最短路径三个字就开始写Dijkstra模板结果忽略了第二权重的限制导致答案错误。我总结了一下历年机试里图论部分的高频考点是BFS求最短路迷宫、矩阵类问题DFS 回溯排列组合、子集问题拓扑排序判断有向图是否有环、输出拓扑序列并查集连通性判断、最小生成树的Kruskal算法Dijkstra单源最短路重点是堆优化版本这些内容每一个都必须达到看到题目就能反应出模板的熟练度。2.3 拉开差距的难题动态规划所有参加过中大机试的同学反馈里几乎都会提到动态规划是决定你能不能拿到高分的核心。DP这个东西难不在代码难在思维。代码模板就那么几行但你要能识别出这道题可以用DP并且设计出正确的状态定义和状态转移方程。考题里的DP类型非常广泛这十几年里基本把主流DP类型都考遍了背包DP0-1背包、完全背包区间DP石子合并、括号匹配线性DP最长递增子序列、编辑距离状态压缩DP旅行商问题、铺砖问题树形DP树的直径、树上最大独立集以区间DP为例石子合并问题几乎成了中大机试的常驻嘉宾有n堆石子排成一排每堆石子重量为w[i]每次只能合并相邻两堆合并代价为两堆重量之和求将n堆合并成一堆的最小总代价。这道题的状态定义非常经典dp[i][j]表示将第i堆到第j堆合并成一堆的最小代价。状态转移方程是dp[i][j] min(dp[i][k] dp[k1][j] sum[i][j])其中 i ≤ k j但这里有个非常关键的坑循环顺序。如果你按照i从0到n、j从i到n的顺序去填表那算dp[i][j]的时候dp[k1][j]可能还没算出来答案肯定是错的。正确做法是枚举区间长度len从小到大先算所有短区间的DP值再算长区间的。for (int len 2; len n; len) { for (int i 1; i len - 1 n; i) { int j i len - 1; dp[i][j] INF; for (int k i; k j; k) { dp[i][j] min(dp[i][j], dp[i][k] dp[k1][j] sum[j] - sum[i-1]); } } }很多同学死记硬背模板但没搞清楚为什么按长度枚举结果稍微变个题目就卡住了。记住动态规划的代码迭代顺序本质上是保证计算某个状态时它所依赖的所有状态都已经计算完毕。2.4 冷门但偶尔出现的内容数论、字符串、贪心除了上面说的三大主力还有一小部分内容属于次重点出现的频率不高但一旦出现就是很多人的灾难因为平时练习容易忽略。数论方面快速幂、最大公约数、素数筛、模运算这些基础内容要掌握。尤其是同余和模逆元有一类大数组合数取模的题目如果你不知道卢卡斯定理根本无从下手。字符串方面KMP算法、Trie树的出现频率不算高字符串哈希倒是偶尔会用到。这些内容不属于必考但属于锦上添花有时间可以了解一下没时间建议战略性放弃。贪心算法比较微妙——它不像DP那样有固定的模板有时候看起来像是DP的题实际上贪心就能做反过来也一样。这类题考的是题感和数学直觉短期内难以提升建议通过大量刷题来培养感觉不要指望临时突击。3. 五道代表真题的完整思路拆解从读题到AC的全过程前两章偏道的层面这一章我来讲点术的东西。我选了五道有代表性的题目它们不是某个具体年份的原题前面说了回忆版题目细节不可靠但每一道都对应着历年真题里的一个高频考点。我把完整的解题思路和关键代码写出来你照着这个思路去刷题效率会高很多。3.1 高精度乘法不止是模拟竖式更要防溢出题目原型给定两个长度不超过300的十进制非负整数A和B无前导零求A×B的值。思路分析这题主要考察对数据范围的分析。300位的数字就算用unsigned long long最大约1.8×10^1920位也远远存不下所以必须使用高精度即用数组来模拟手工计算。高精度乘法的核心逻辑是乘积的第ij位从低位开始编号由第i位和第j位相乘产生。我们先把每一位的乘积累加到一个结果数组里然后再统一处理进位。vectorint multiply(string a, string b) { int n a.size(), m b.size(); vectorint result(n m, 0); // 结果最多nm位 // 从低位到高位处理注意字符数字的转换 for (int i n - 1; i 0; --i) { for (int j m - 1; j 0; --j) { int mul (a[i] - 0) * (b[j] - 0); int p1 i j, p2 i j 1; // 乘积会影响到两位 int sum mul result[p2]; // 加上当前位的已有值 result[p2] sum % 10; result[p1] sum / 10; } } // 去掉前导零 int start 0; while (start result.size() - 1 result[start] 0) start; return vectorint(result.begin() start, result.end()); }避坑提示位数的分配问题。两个长度分别为n和m的数字相乘结果最多nm位最少nm-1位。上面的代码把结果数组开了nm位并处理了进位所以即使最高位最终是0也能通过去掉前导零来修正。但如果只开nm-1位遇到需要多一位的情况比如99×999801数组就越界了这是很多人调试半天都找不到的bug。3.2 拓扑排序判环从修课顺序看DFS和Kahn的高下题目原型给定n个课程和m个先修关系u代表v的前置课程必须先学u才能学v判断是否存在一种学习顺序学完所有课程。若存在输出任意一种合法顺序若不存在输出Impossible。思路分析这道题就是经典的拓扑排序判环。两个主流方案Kahn算法基于BFS和DFS状态标记。Kahn算法的思路很直观每次从图中找一个入度为0的节点打印它然后把它的所有出边删除即把邻居的入度减1重复这个过程。如果最后打印的节点数不等于总节点数说明图里有环。DFS判断环的思路是用三种颜色标记节点状态——0表示未访问1表示正在访问在当前DFS路径上2表示已经访问完成。如果在DFS过程中遇到一个状态为1的节点说明存在环。vectorvectorint adj; // 邻接表 vectorint status; // 0未访问 1访问中 2已完成 vectorint topo; // 存储拓扑序列 bool hasCycle false; void dfs(int u) { status[u] 1; for (int v : adj[u]) { if (status[v] 0) { dfs(v); if (hasCycle) return; } else if (status[v] 1) { hasCycle true; return; } } status[u] 2; topo.push_back(u); // 后序遍历存的是逆拓扑序 }避坑提示上面的DFS代码最后输出拓扑序列时要注意因为DFS是后序加入节点所以topo数组中存的是拓扑序的逆序输出时需要反转。另外还要注意一个使用Kahn算法的细节题目如果要求按字典序输出拓扑序列单纯的队列就不行了需要用优先队列小顶堆来存储入度为0的节点保证每次取出的都是编号最小的节点。3.3 并查集与离线查询考场上的连通性黑盒题目原型给定一个无向图有n个节点编号1到n和m条边。然后有q个查询每个查询给定两个节点u和v问在这两个节点是否连通。思路分析如果直接用DFS或BFS去做连通性判断最坏情况下每个查询都要遍历一次全图q次查询就是O(q×(nm))一看就知道要超时。正确做法是利用并查集做预处理。并查集可以在近乎O(1)的时间内完成判断两个元素是否在同一个集合的操作非常适合批量处理连通性问题。并查集的核心代码很短int parent[N]; int find(int x) { return parent[x] x ? x : parent[x] find(parent[x]); // 路径压缩 } void Union(int x, int y) { int fx find(x), fy find(y); if (fx ! fy) parent[fx] fy; }处理流程读入所有边并逐个合并到并查集里然后对每个查询只需要比较find(u) find(v)即可。避坑提示并查集虽然在代码层面很简单但如果初始化不完整忘记设置parent[i] i或者路径压缩写错会导致find函数死循环。另外如果题目给的是离线查询先给出所有查询再给出边的信息可能需要根据边的权值排序并离线处理这种变形在中大机试里也出现过属于进阶考法。3.4 区间DP石子合并是入门变形题才是王道题目原型n堆石子排成一排每次可以合并相邻两堆代价是两堆重量之和。求把所有石子合并成一堆的最小总代价。我在第二章里已经给出了关键代码这里我讲讲更重要的东西——这个基础模型的变形因为历年真题里几乎没有出过最原始的石子合并题。常见的变形有三种方向一是把排成一排改成围成一个环解法是把数组复制一遍长度从n变成2n然后在2n的长度上做区间DP最后取长度为n的区间里最小的dp值二是把合并相邻两堆改成合并任意两堆那就退化成哈夫曼树了用贪心优先队列解决三是给每堆石子加上颜色或类型的限制要求合并时必须满足某种条件这种题就能直接演变成一道压轴题。变形的核心在于你能不能认出它是区间DP。我给你的判断方法是——题目里有没有合并分割删除子段这类操作且操作的对象在位置上相邻不是任意的如果有大概率是区间DP。注意当题目强调相邻时别套用贪心。3.5 朴素匹配与KMP从找子串看数据结构的选择题目原型给定一个文本串s长度不超过10^5和一个模式串p长度不超过10^5求p在s中出现的次数。思路分析最直接的方式是双重循环暴力匹配复杂度O(n×m)n和m都是10^5的话最坏需要10^10次操作必超时。这时候就需要KMP算法。KMP的核心思想是当匹配失败时模式串不用从头开始而是跳到最长相同前后缀的位置继续匹配。这个跳的动作通过next数组或者叫部分匹配表实现。// 计算next数组 void getNext(string p, vectorint next) { int n p.size(); next[0] 0; int j 0; // 当前最长相同前后缀长度 for (int i 1; i n; i) { while (j 0 p[i] ! p[j]) j next[j - 1]; if (p[i] p[j]) j; next[i] j; } } // KMP主算法 int kmp(string s, string p) { int n s.size(), m p.size(); if (m 0) return 0; vectorint next(m, 0); getNext(p, next); int j 0, count 0; for (int i 0; i n; i) { while (j 0 s[i] ! p[j]) j next[j - 1]; if (s[i] p[j]) j; if (j m) { count; j next[j - 1]; // 允许重叠出现时这样写 } } return count; }避坑提示注意if (j m)时j next[j - 1]这句。如果你要统计不重叠的子串出现次数这里应该j 0如果要统计重叠的才用j next[j - 1]。不同题目要求不一样看清楚再写。另外getNext函数的实现有无数种版本开头和结尾细节略有差异不要混用不同版本的模板否则很容易出现数组越界或死循环。4. 命题风格这些年经历过的几次重要丈量从题海战术到算法思维刷真题的一个重要价值就是你可以从中看出命题人的思路和变化趋势。我结合这几年的回忆版题目和自己的观察总结了中大保研机试命题风格的几个显著变化。4.1 从大模拟到算法设计的转变大概是2015年到2018年那几年中大机试的题目以大型模拟题为主。那时是4道题第一道高精度第二道字符串处理第三道大模拟比如模拟一个系统流程第四道BFS或DFS。当时很多保研机构给出的备考策略就是把高精度和模拟练熟基本就稳了。那个时代的机试确实更接近代码能力测试不太需要复杂的算法思维。但大概从2019年开始情况明显变了。模拟题比重下降动态规划、图论这些算法设计类题目成为中坚力量题数也从4道逐步增加到5道甚至6道。这个变化背后的逻辑其实很清晰过去几年计算机保研的竞争越来越激烈考察的标准自然水涨船高。招生老师需要从机试中筛出真正有算法思维底子和问题建模能力的学生而不是仅仅能照着流程写代码的人。4.2 数据结构从纸面到应用的深化早年的数据结构题考察的往往是原题比如给你一个数组让你实现队列或栈的基本操作。现在不一样了数据结构几乎不会单独出题而是作为某个算法题的基础组件出现。举个例子你需要熟练掌握单调栈和优先队列不是为了考它们本身而是为了解一道求滑动窗口最大值的题。你需要熟练掌握并查集不是为了考这个结构而是一道图论题的其中一个步骤。这种考察方式对灵活度的要求高得多。我备考时有个体会死记硬背数据结构模板是没用的你得真正理解这个数据结构在解决什么问题才能在题目里识别出它。比如看到区间最值滑动窗口应该立刻想到单调队列看到第k大合并集合应该想到优先队列和并查集。这是学过和会用的区别。4.3 输出要求的变化从给答案到给过程还有一个容易被忽视的变化是输出要求越来越细化。早年很多题只要输出一个数字就行现在有些题目要求你输出方案、路径、最小字典序序列等。这给备考带来的提醒是你不仅要会算还得会记录计算的过程。比如最短路径题很多模板只教你求最短距离但考场上一旦要求你输出具体路径你就需要在松弛操作时记录前驱节点并在最后递归输出。DFS回溯题里如何正确地在递归前加入状态、递归后撤销状态直接决定了你能不能输出正确的路径序列。平时刷题时如果你用的刷题平台只判结果是否正确建议你每次做完题后自己额外想想如果这道题要求输出方案我该改哪里 这个习惯在考场上价值极高。4.4 难度曲线越来越陡峭近几年回忆版题目的一个共同特征是第1题依然很简单但后续题目的难度爬升非常快。经常出现第1题是签到题、第2题就需要仔细思考、第3题就已经难倒大部分人的情况。这意味着考场策略变得非常重要。很多同学第1题做完之后直接钻进第2题的深坑里花了一个半小时也没做出来导致后面的大题根本没时间看最终成绩很不理想。我给你的建议是开考后先花10分钟把所有题目都看一遍对每道题的难度和类型心里有个数然后按照先易后难、先拿分后攻坚的原则来安排时间。第2题如果20分钟内没有明确思路果断先跳过去看后面的题。机试不是高考不会因为你跳题就扣分抓住能得的分才是王道。5. 把真题价值榨干的备考路线从零基础到能上考场到底该怎么准备前面讲了那么多是什么和为什么最后这部分落到实际操作上你接下来四个月、三个月、甚至一个月到底该怎么复习5.1 阶段一基础算法扫盲第1-3周这一阶段的目标是能独立写出常见算法模板不追求速度追求理解。你需要一个一个吃透下面这些内容输入输出技巧scanf/printfvscin/cout推荐前者如果要提速后者要加ios::sync_with_stdio(false)和cin.tie(0)常用STL容器vector、set、map、unordered_map、stack、queue、priority_queue、string排序与二分归并排序、快速排序的原理二分查找和二分答案的思想高精度运算加法、减法、乘法、除法都要会这里我要专门强调一下输入输出。很多同学长期用cin/cout一到OJ上一提交就莫名其妙比别人慢就是因为IO不够快。数据量一大cin/cout可能比scanf/printf慢一个量级。如果你习惯了cin/cout记得在代码开头加上那两行提速代码这一行之差可能就是从超时到AC的距离。5.2 阶段二搜索与动态规划攻坚第4-8周搜索和动态规划是机试的重头戏这个阶段你需要投入最多的精力。搜索部分DFS要掌握回溯、剪枝BFS要掌握最短路径、状态压缩位运算表示状态、双向BFS这几个变体。动态规划部分按顺序吃透背包九讲的前四讲0-1背包、完全背包、多重背包、混合背包、线性DP最长上升子序列、最长公共子序列、编辑距离、区间DP石子合并、矩阵连乘。学DP有个很重要的心法先尝试用DFS暴力写画出递归树然后从递归树中观察重叠子问题再用记忆化搜索去重最后才改写成自底向上的DP。这样你才能真正理解状态转移方程的由来而不是死记硬背。5.3 阶段三图论与进阶数据结构第9-11周图论部分掌握建图邻接矩阵、邻接表、DFS/BFS遍历、Dijkstra堆优化版、Floyd、Bellman-Ford/SPFA、Kruskal、Prim、拓扑排序、Tarjan可选。进阶数据结构并查集带路径压缩和按秩合并、堆用STL的priority_queue、单调栈、单调队列、树状数组可选、线段树可选。对大部分同学来说树状数组和线段树属于锦上添花中大的中等难度的题很少直接考察它们但会在综合题的子步骤里用到。如果你的时间只够学核心这部分可以战略性放弃如果时间充裕建议掌握。5.4 阶段四真题模拟与实战训练第12-16周最后一个月进入实战状态。每周至少完整地做一次3小时的模拟赛用OJ平台严格计时不允许中途翻书、查资料。模拟赛的题目选择顺序是优先刷中大历年回忆版真题过滤掉明显失真的大模拟题其次刷其他985高校的保研机试真题流出的更完整再次刷NOIP普及组和高分段题目难度和风格都比较接近最后刷Codeforces的Div2 A-C题用来保持题感和速度模拟赛最重要的不是做对了多少题而是练时间分配和心态。我见过太多人平时刷题很强一到限时环境就手忙脚乱、原本会做的题也写错了。适应了限时、限环境、限机器的状态才是真正的准备好了。注意网上流传的很多所谓中大保研机试真题里有相当一部分是培训机构为了引流伪造的或者严重改写的。你刷题时如果发现某道题的描述非常详细、样例非常标准、还附带官方题解反而要小心——真正的回忆版真题往往很粗糙细节残缺。别纠结于是不是原题关键看它考察的知识点和难度是否匹配这才是真题真正的价值。5.5 考前两周的极限操作如何把状态调到最佳如果你刚好处于考前两周时间不多我给你一套临时抱佛脚的方案第一把高精度全套代码、并查集模板、Dijkstra堆优化模板、拓扑排序模板、KMP模板、0-1背包模板全部默写一遍。这几样是最大概率考到的必须达到肌肉记忆级别。第二每天做两道中低难度的题目保持手感但不要碰太难的题。考前两周不适合学新知识容易焦虑而且收益很低。第三熟悉OJ的操作流程怎么提交、怎么看报错、怎么判断是TLE还是MLE还是RE。每年都有同学因为不知道怎么查看CE编译错误而被扣分这属于非智力因素一定要避免。第四调整作息。机试通常安排在上午从现在开始把头脑最清醒的时间调整到上午。我当年就是习惯性熬夜结果机试那天上午整个人都是蒙的最简单的模拟题都写了很久这个教训记忆犹新。最后提醒机试只是保研路上的一环别让焦虑吃掉你的优势中大保研的最终成绩由机试、面试、本科成绩等多部分构成机试再重要也只是其中一环。我不止一次见过机试表现一般但面试环节表现突出的同学最终拿到offer也见过机试高分但面试一塌糊涂的人被刷下来。所以备考机试要尽力但不要把所有宝都押在上面。把算法功底打好既是为了这场考试也是为了你接下来三年的科研工作打基础——真正读研之后你会发现写代码、调算法、做工程的能力没有一个是不需要这些基本功的。我个人的一个小习惯是每次模拟赛结束之后不管成绩好坏都花10分钟写一下复盘笔记哪道题卡住了、卡在什么环节、是知识盲区还是代码细节、下次遇到同类问题该怎么避免。这个习惯帮我躲过了很多重复的坑你也可以试试。祝机试顺利考场见。
返回列表