DHU上机打卡D7,这个标题在我备忘录里躺了整整一周。第七天,我照例在东华大学OJ上刷完三题、截图、写复盘,然后关掉终端。坚持到这一天,最明显的变化不是会做的题变多了,而是看到WA不再烦躁,能按步骤排查出问题在哪。这篇就把D7当作一个切片,讲清楚我这七天是怎么规划的、D7当天具体做了哪几道题、踩了哪些坑,顺带聊聊这些练习对准备华为OD机考和考研复试上机到底够不够用。如果你也想把上机刷题这件事坚持下来,或者正在为机考、复试发愁,这份复盘应该能给你一份可以直接上手的路线。
1. D7打卡的起因与这七天的整体安排
1.1 为什么会选DHU OJ作为打卡阵地
先说背景。我之前刷题最大的问题是“刷得散”:今天LeetCode两道题,明天牛客一道,后天换个平台再做几题,看起来天天在学,但一个月后回头一查,真正吃透的题型没几个。后来我给自己定了个规矩:固定一个OJ,固定一个周期,每天至少AC三道题,并且把每道题的思路、复杂度、踩坑点写成打卡笔记。选择东华大学OJ,理由很直接:题目分类比较清楚,从基础到进阶的跨度合适,提交反馈够快,而且不用像某些商业平台那样开会员才能看完整解析。
可能有人会觉得,现在大家不都用LeetCode和牛客吗,为什么回学校OJ刷题?我的体会是,学校OJ的题目风格更贴近真实考试和上机环境:输入输出要自己处理,多组测试用例是常态,题目描述有时候还会故意留点模糊地带。这种“不友好”其实是在帮你提前适应考场。尤其是准备复试上机的同学,很多院校的上机题就是这种画风,不提前适应,考场上很容易被输入输出格式搞得心态崩掉。
1.2 七天路线:从语法热身到图论动态规划
七天的路线我在第一天就规划好了,免得每天临时想练什么。前两天先做基础题,把输入输出、循环、数组、字符串这些容易手生的部分热起来;三四天集中在排序、二分、双指针;五六天开始碰树和图,主要是DFS、BFS和最小生成树;第七天做一次综合复盘,把前面几类题型各抽一道重新做一遍。
| 天数 | 主题 | 目标 |
|---|---|---|
| D1-D2 | 输入输出、模拟、字符串基础 | 找回写代码的手感,AC至少6题 |
| D3-D4 | 排序、二分、双指针 | 掌握常见复杂度优化套路,AC 8题 |
| D5-D6 | DFS、BFS、图论基础 | 能独立写出搜索模板,AC 8题 |
| D7 | 综合复盘 | 重做经典题,记录踩坑清单 |
这张路线表看起来简单,但执行起来最大的难点不是题目难,而是“每天固定投入时间”。我建议不管当天状态如何,至少开编译器跑一题再收工,哪怕只过一题也算打上卡。习惯一旦断了一天,后面很容易彻底断掉。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. D7当天实测的三道典型题目复盘
D7当天我没有去碰新题,而是把前六天最容易出错的三类题各抽了一道重写:大数加法、二叉树层序遍历变体、0/1背包状态压缩。这三题分别代表字符串处理、树的BFS、经典动态规划,刚好也是各类上机考试的高频区域。
2.1 大数加法:基础中的基础,但OJ上并不好过
很多同学看到“大数加法”会觉得很无聊,觉得不就是把两个数加起来吗?但在OJ上,数字范围经常超出long long,比如两个1000位的十进制数相加,这时候只能用字符串模拟竖式。我D7重写这题时,第一版没有处理多组输入,结果本地样例过了,提交直接Output Limit Exceeded,光这个就浪费了两次提交。
cpp复制#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
string addBig(const string &a, const string &b) {
int i = (int)a.size() - 1;
int j = (int)b.size() - 1;
int carry = 0;
string res;
while (i >= 0 || j >= 0 || carry) {
int sum = carry;
if (i >=
