每年二月的清晨,当朋友圈开始刷屏“美赛开赛了”,无数数学建模人的神经就会骤然抽紧。这道MCM B题,通常在开赛第一天凌晨新鲜出炉,你和队友需要在96小时内拿出完整论文,还可能要附上能跑的源码。很多人看到题目的第一反应是“题都看不懂”,但几年国赛和美赛打下来,我越来越确信一件事:B题拼的不是智商,而是破题框架和执行速度。
我一个朋友第一次打美赛,光在“选A还是选B”上就耗了三个小时,结果B题读了三遍都没抓住关键约束,最后交上去一篇连摘要都没打磨的论文,自然与奖项无缘。这其实非常可惜。美赛B题表面上千变万化,内核却有很强的规律性,它考的是你用数学模型解决“真实世界开放问题”的能力,而不是比谁背的公式多。这套打法只要在赛前梳理清楚,拿到2026年的题目时,你完全可以在半小时内判断“这题能不能打”,然后在第一天就锁定模型框架。
这篇文章不押题、不猜题,而是给你一套拿来就能用的完整流水线:从选题决策、题目拆解、模型选型、源码模板到论文写作,全部用这些年我实测过的方法来梳理。我尽量用大白话讲,里面所有代码块都是可以直接复制改的,哪怕你前一天才开始学Python,也能照着拼出一篇像模像样的参赛论文。
1. 先搞懂B题到底在考什么
1.1 近十年B题的命题规律
很多人觉得美赛B题题目飘忽不定,其实翻一翻往年的题就能发现它的“性格”。近几年的MCM B题里,我印象最深的有三类的典型:一类是让无人机去扑救山火,涉及火势蔓延预测和资源调度;一类是水库群的水量分配与电价谈判,涉及多目标决策;还有一类是设计搜索策略去找失踪的潜水器,涉及概率模型、搜索路径优化和传感器决策。这些题目表面上是“物理题”“地理题”“工程题”,但真正要你交的东西,往往是“决策建议”和“优化方案”。
这就说明了B题的一个核心特质:它通常给一个真实场景,但不会把所有数学结构都告诉你,需要你自己抽象出一个可计算的问题。 它不像某些校内竞赛那样,题干里明明白白写着“请用层次分析法”;B题往往只给一堆背景描述、数据和零散条件,你要自己判断该用微分方程、优化模型、统计模拟,还是把几个方法串起来。这也是为什么很多队伍死在“不会定位问题”上——不是不会算,而是不知道算什么。
另一点值得注意:B题非常看重结果的“可解释性”。你建立的模型输出,不能只是一个数,评委更希望看到你这个数对现实决策有什么意义。比如水库调水问题,如果你只给出“最优放水量=1200万方”,远远不够;你得解释为什么是这个量、极端干旱年怎么办、上下游的冲突怎么平衡。这种“从数学到管理建议”的跳跃,是B题拿高分的关键。
1.2 拿到题目后前12小时要做什么
美赛的96小时听起来很长,但真正有效的时间不超过前48小时,因为后两天要给写论文和排版留足余量。我的习惯是,开赛后的第一个12小时只做三件事:读题、定位、定模型。
第一,逐句读题,并用不同颜色标注信息类型。我在Word里会用三种颜色:红色标已知条件(数据、参数、约束),蓝色标待求目标(要你回答什么问题),绿色标隐含场景信息(比如“社区有不同收入群体”“旱季降水量少”,这些暗示你的模型中要考虑异质性或极端情景)。这一步很多人嫌麻烦跳过,但它能帮你避开“漏条件”这个最大坑。
第二,把题目翻译成“母题”。也就是说,不要被外壳迷惑,去想“这本质上是什么问题”。搜索潜水器,本质是“目标可能在某区域按某概率分布,如何设计路径使发现概率最大”,这就是一个覆盖优化问题;水库调水,本质是“多个主体共享有限资源,如何分配使总收益最大且各方接受”,这就是资源分配博弈。只要你能把题目翻译成母题,脑子里马上就能浮现出可用的模型家族。
第三,判断团队是否适合做B题。如果你的团队擅长连续模型和数值求解,B题通常会比C题(大数据题)更友好;如果团队里没人会写复杂算法,B题也可能因为模型灵活而更容易“绕过去”。但要注意,B题几乎绕不开优化,哪怕你只是用穷举法做参数扫描,也得让评委看到你有“优化意识”。所以赛前至少要学会一种优化手段,退一万步,scipy.optimize里的differential_evolution也要会用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 建模思路拆解:从问题到模型的四步走
2.1 先把“故事”翻译成数学陈述
很多队伍拿到题目就开始写方程,这是本末倒置。我推荐先做一个“翻译表”:把题干里的自然语言逐条翻译成数学语言。比如题干说“救援物资必须在24小时内送达”,这翻译过来就是一个时间约束$t_i \leq 24$;题干说“无人机续航不超过2小时”,这翻译过来就是能量约束$\sum_j E_{ij} \leq E_{max}$;题干说“希望成本尽量低”,这翻译过来就是目标函数$\min C$。
这个翻译步骤看似机械,但它能帮你把题目里所有隐藏的建模要素都“可视化”。我在实战中还会画一个简单的输入-变量-输出图:输入是已知数据,变量是你要决策的东西,输出是评价指标。拿2024年潜水器搜索题举例,输入是海流数据、潜水器失联位置、传感器性能;变量是搜索路径、传感器布点;输出是发现概率、搜索成本。这个图一旦画出来,整个模型的骨架就清楚了,接下来只是往骨架里填肉。
这里给新手一个忠告:不要一上来就用高大上的模型。你会发现B题里80%的问题,用微分方程加蒙特卡洛模拟,或者线性规划加灵敏度分析,就能做出漂亮的结果。评委更看重的是“你的模型能不能自圆其说”,而不是“你用了多偏门的算法”。我见过太多队伍堆了神经网络、强化学习,结果论文里连网络结构都没解释清楚,最后分数反而不如老老实实做优化建模的队伍。
2.2 模型选型清单:B题常见的六条主干道
根据我的参赛和指导经验,B题的模型需求基本逃不出这六个方向。我做了一个速查表,当你被某个“母题”卡住的时候,直接对着表格找方向就行。
| 场景信号 | 模型方向 | 求解工具 |
|---|---|---|
| 随时间变化的趋势、扩散、增长 | 微分方程、差分方程 | Python scipy.integrate / Excel手算验证 |
| 资源分配、路径选择、成本最小化 | 线性规划、整数规划、动态规划 | scipy.optimize.linprog / pulp / ortools |
| 不确定性、随机因素多 | 概率模型、蒙特卡洛模拟 | numpy.random 手动实现 |
| 多目标冲突、利益相关方博弈 | 多目标优化、博弈论、TOPSIS | pymoo 或加权法 |
| 空间分布、覆盖、搜索 | 几何模型、网格覆盖、元胞自动机 | numpy + matplotlib 可视化 |
| 复杂系统涌现行为 | 元胞自动机、智能体模拟(ABM) | mesa 库或手写循环 |
看到没有,每个方向都有现成工具,关键是你要在开题当天就确定走哪条路。我的经验是:如果你能在题目里同时看到“时间”和“空间”两个关键词,那大概率是微分方程加优化混合模型;如果题目通篇在谈“成本”“效益”“约束”,那大概率是规划类模型;如果题目里有大量随机性表述,比如“概率”“不可预测”“突发”,那就要用蒙特卡洛这类模拟工具。
2.3 一个随手可跑的简单例子:扩散过程建模
为了让上面的选型不那么抽象,我给你写一个最小的可运行样例。假设B题里有一问让你模拟污染物在湖中的扩散浓度,或者在人群中传播的信息扩散,你都可以用经典的一维热传导/扩散方程来当起点:
$$\frac{\partial u}{\partial t} = D \frac{\partial^2 u}{\partial x^2}$$
我在代码里用一个简单的显式有限差分法来求解,这在国内数学建模里非常常用,简单而且可控。
python复制import numpy as np
import matplotlib.pyplot as plt
# 参数设置
L = 100.0 # 空间长度
T = 50.0 # 总时间
Nx = 200 # 空间网格数
Nt = 5000 # 时间步数
D = 0.5 # 扩散系数
dx = L / (Nx - 1)
dt = T / Nt
# 稳定性条件:D*dt/dx^2 必须小于0.5
print("稳定性系数:", D * dt / dx**2)
u = np.zeros(Nx)
# 初始条件:中间浓度高
u[Nx//2 - 10: Nx//2 + 10] = 1.0
for n in range(Nt):
u_new = u.copy()
for i in range(1, Nx - 1):
u_new[i] = u[i] + D * dt / dx**2 * (u[i+1] - 2*u[i] + u[i-1])
u = u_new
plt.plot(np.linspace(0, L, Nx), u)
plt.title("Diffusion after time T")
plt.xlabel("x")
plt.ylabel("u")
plt.show()
这个代码很短,但它是很多B题“动态部分”的通用起点。你需要做的就是调整初始条件、边界条件,或者把扩散项换成逻辑斯蒂增长项,就能变成一个人口扩散或资源扩散模型。注意那个稳定性条件,D*dt/dx^2一超过0.5,数值解就会发散成锯齿状,这是我们当年踩过的坑,后面第四节再详细讲。
3. 换个视角看B题:经典几何-优化模型的迁移
3.1 为什么建议练“板凳龙”这类国赛题
热词里频繁出现“板凳龙”和“几何—运动”,这是2024年国赛A题的一个经典案例。虽然它是国赛题,但对美赛B题有很强的迁移价值,因为美赛B题也经常带有“几何+运动+优化”的混合血统,比如设计无人机编队轨迹、规划水面搜救路径、机器人避障路线等。你完全可以把“板凳龙”的建模方法练熟,等真正上了B题战场,看到类似几何运动题,你就能直接“抄作业”。
我第一次做“板凳龙”这道题时,最大的感悟是:这类题的难点不在于数值求解,而在于把几何关系用递推公式写清楚。 题目里每条板凳有固定长度、固定铰接位置,龙头的转角会逐节传导。很多人被这个“运动链条”绕晕,其实只要抓住每一节板凳的位姿递推关系,整个问题就是一堆坐标旋转和平移的叠加。
3.2 递推式几何关系怎么建
假设你有一串由N节刚性板凳组成的龙身,每节长度L,相邻两节在端点铰接。龙头以某个角速度转向时,第i节相对第i-1节的转角不是瞬间完成的,会有一个滞后或约束。最朴素的做法是,把每一节看成一个刚体,用前一个刚体的末端坐标作为当前刚体的起点,然后通过旋转矩阵拼出下一段。
python复制import numpy as np
def rotation_2d(theta):
c, s = np.cos(theta), np.sin(theta)
return np.array([[c, -s], [s, c]])
def dragon_positions(head_angle, joint_angles, L, N):
# head_angle: 龙头的绝对角度
# joint_angles: 长度为N-1的数组,表示每一节相对前一节的转角
pts = [(0.0, 0.0)]
current_angle = head_angle
for i in range(N):
# 在当前方向上延伸L
dx = L * np.cos(current_angle)
dy = L * np.sin(current_angle)
pts.append((pts[-1][0] + dx, pts[-1][1] + dy))
if i < N - 1:
current_angle += joint_angles[i]
return np.array(pts)
# 比如龙头转60度,后续节都在慢慢跟上
joints = np.radians([10, 8, 6, 4, 2, 1, 0.5])
head = np.radians(60)
positions = dragon_positions(head, joints, L=2.0, N=8)
print(positions)
写出这个递推之后,下一步就是把“龙头走得多快、能不能碰到障碍、各节会不会互相碰撞”这些要求,变成对joint_angles的约束,然后用优化去解。这种“几何关系+约束+优化”的组合拳,在美赛B题里几乎年年都能用上。
3.3 把几何模型转成优化目标
我们接着上面这个例子说。假设题目要求龙身不得碰到某个圆形障碍区,每节板凳的中心坐标是$p_i=(x_i,y_i)$,那么“避障”就可以表达成一个不等式约束:$|p_i - C|^2 \ge R^2$,其中$C$是圆心,$R$是障碍半径。而题目想要“龙头在最短时间内通过某个路径”,那这就是目标函数$\min \sum \theta_i^2$或者$\min T$。
我在实际求解时,会把几何递推公式写成一个函数,输入是转角序列,输出是所有点的坐标,然后用scipy.optimize.minimize去优化。很多队伍一听“优化”就害怕,其实只要你能写出“变量—约束—目标”三件套,优化器自己会干活。关键是你的初始值要给得靠谱,比如先用零转角当作初始解,再一步步放宽约束。
这类练习的意义在于,它能帮你训练一种“拆题直觉”:看到几何运动,先想刚体变换;看到避障,先想距离约束;看到“最快”“最短”“最优”,先想目标函数。等这个直觉养成了,美赛B题里那些看似复杂的场景,在你眼里就是一连串可拼装的模块。
4. 源码工具箱:一套直接能改的Python模板
4.1 数据读取与快速洞察
美赛B题经常给一堆CSV,数据脏得让你怀疑人生。我建议开赛第一天就先把数据摸底做了,别等模型建好才发现数据格式不对。下面这段模板我几乎每次比赛都会先用一遍。
python复制import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv("data.csv", encoding="utf-8")
print(df.head())
print(df.describe())
print(df.isnull().sum())
# 如果有缺失值,最简单的处理:数值列用中位数填充,类别列用众数填充
for col in df.columns:
if df[col].dtype in ["float64", "int64"]:
df[col] = df[col].fillna(df[col].median())
else:
df[col] = df[col].fillna(df[col].mode()[0])
# 相关性热图,方便你在建模前找“哪些变量可能有关系”
import seaborn as sns
plt.figure(figsize=(10, 8))
sns.heatmap(df.corr(numeric_only=True), annot=True, cmap="coolwarm")
plt.title("Correlation Heatmap")
plt.show()
这个阶段输出的图表,可以直接放到论文附录当“数据分析”部分。美赛评委非常喜欢看到你“先看数据再建模型”的痕迹,这比空谈假设要有说服力得多。
4.2 连续模型求解模板
如果B题里出现“随时间变化”的动态过程,比如感染人数增长、污染物扩散、资源消耗,你就需要解常微分方程(ODE)。scipy.integrate.odeint是稳定好用的选择,我拿一个简化版Logistic增长模型演示。
python复制from scipy.integrate import odeint
def logistic_model(p, t, r, K):
# p: 当前数量
# r: 增长率
# K: 环境容量
dpdt = r * p * (1 - p / K)
return dpdt
p0 = 10
r = 0.3
K = 10000
t = np.linspace(0, 50, 200)
solution = odeint(logistic_model, p0, t, args=(r, K))
plt.plot(t, solution[:, 0])
plt.xlabel("time")
plt.ylabel("population")
plt.title("Logistic Growth")
plt.show()
这个模板看着很简单,但真实比赛里你往往会遇到多变量耦合方程组,比如同时模拟多个群体的变化。你只要把logistic_model返回值从标量改成列表,odeint一样能解,这是它最方便的地方。
4.3 优化模型求解模板
B题几乎必然会有一个“优化”问题,最常见的是一个线性规划或非线性规划。如果你能把目标函数和约束写成数学形式,用scipy.optimize.minimize就能解。下面是一个带不等式约束的示例,变量是二维的,模拟“两个资源怎么分配”。
python复制from scipy.optimize import minimize
def objective(x):
# 假设我们要最大化 x0 + 1.5*x1,所以求相反数
return -(x[0] + 1.5 * x[1])
def constraint1(x):
return x[0] + x[1] - 10 # >= 0 表示 x0+x1至少为10
def constraint2(x):
return 20 - (2*x[0] + x[1]) # 2x0+x1 <= 20
cons = [{"type": "ineq", "fun": constraint1},
{"type": "ineq", "fun": constraint2}]
bounds = [(0, None), (0, None)]
result = minimize(objective, x0=[1, 1], bounds=bounds, constraints=cons)
print("最优解:", result.x)
print("最优目标值:", -result.fun)
注意,scipy.optimize.minimize默认是求最小值,如果你要最大化,就把目标函数取负号。这个方法只能保证找到局部最优解,所以我会多试几个初始点,或者直接切换到differential_evolution这种全局优化算法。
python复制from scipy.optimize import differential_evolution
res = differential_evolution(lambda x: -(x[0] + 1.5*x[1]),
bounds=[(0, 100), (0, 100)],
constraints=cons, seed=42)
print("全局最优解:", res.x)
这一招在B题里特别有用,因为美赛的约束经常是非线性、非凸的,普通梯度法很容易卡在局部最优,而differential_evolution不需要求导,哪怕你是刚接触优化也能跑出像样的结果。
4.4 蒙特卡洛模拟模板
B题里“不确定性”是常客,这时候蒙特卡洛模拟是你的救星。它能告诉你“最可能的结果”和“最差情景”。我写一个最简单的库存或收益模拟模板。
python复制np.random.seed(42)
n_sim = 10000
results = []
for _ in range(n_sim):
demand = np.random.normal(100, 20) # 需求服从正态分布
supply = np.random.uniform(80, 130) # 供给服从均匀分布
profit = 5 * min(demand, supply) - 2 * max(0, demand - supply)
results.append(profit)
results = np.array(results)
print("期望利润:", results.mean())
print("95%置信区间:", np.percentile(results, [2.5, 97.5]))
把这个模拟次数调大到几万次,你就能得到一个利润分布,可以用来支撑论文里的风险管理决策。评委看到你用分布而不是单一数值来回答问题,会觉得你的模型比“拍脑袋给答案”高一个档次。
4.5 灵敏度分析与成品图
灵敏度分析是美赛评审非常看重的部分,本质就是“参数变一变,结果怎么变”。它不需要很复杂,最简单的方案是把参数从-20%扫描到+20%,记录目标值的变化,画一条折线或热力图。
python复制param_values = np.linspace(0.8, 1.2, 10)
obj_results = []
for scale in param_values:
r_new = r * scale
sol = odeint(logistic_model, p0, t, args=(r_new, K))
obj_results.append(sol[-1, 0]) # 取最终时刻结果
plt.plot(param_values, obj_results, marker="o")
plt.xlabel("scale of r")
plt.ylabel("final population")
plt.title("Sensitivity Analysis")
plt.show()
我每次比赛都会用这个办法生成3到5张灵敏度分析图,然后用一段话解释“模型结果对哪些参数敏感,为什么”。这几乎是美赛论文里性价比最高的部分——代码量很小,但能明显拉升评阅观感。
5. 论文写作:怎么把“会做”变成“高分”
5.1 摘要的倒金字塔写法
美赛论文的评阅人一天要看几十份论文,摘要往往决定了他对你的第一印象。我见过很多队伍模型做得不错,但摘要写得像流水账,最后只拿了个“Successful Participant”。摘要一定要按“倒金字塔”写:第一句点明问题背景与核心任务;第二句说明你建立了什么模型;第三句说模型包含哪些关键变量与约束;第四句给出核心结果;第五句说结果的现实意义或灵敏度发现。
比如这样写:“针对2026年MCM B题的XX问题,本文构建了一个基于多目标优化的资源调度模型。模型以XX、XX为决策变量,以总成本最小和覆盖率最大为目标,并引入XX约束刻画实际限制。在求解中,采用遗传算法加局部搜索的混合策略,求得Pareto最优解集。结果表明,在基准情景下,该方案可将XX指标提升17.3%,且模型对需求波动具有较强的鲁棒性。” 这样一段话,把“问题—方法—变量—结果—意义”全说清楚了,评委就不用在一堆文字里找重点。
5.2 图表规范与“一眼看懂”原则
美赛论文里,图表是给评委的“快速通道”。我的经验是,每一张图都要做到“不读说明也能看懂”,这需要三条铁律:一是坐标轴标签必须写清楚单位,比如“time (hour)”;二是每条线、每个图例都用大字号,最好14号以上;三是核心结论图放在正文里,支撑图表放附录,不要让人在正文里看一堆冗余大图。
另外,我强烈建议你给每个图配一个“一句话解读”。这句解读不是图题,而是正文里的那句话,比如“从图5可以看出,当续航系数下降到0.8时,最优路径的长度上升了约23%”。这样评委顺着你的文字读,每个图都有存在的理由,而不是“看上去很厉害但不知道想说啥”。
5.3 附录里放什么源码、为什么放
标题既然写了“附源码”,那就说明你要在提交材料里放代码。美赛官方要求论文里可以附代码目录,但这里有个策略:不要把所有代码堆在附录里,而是挑3到5个核心求解文件,并且保证它们是“可运行的最小版本”。
我做过的压缩方法是:把模型求解的脚本里,所有无关数据预处理都删掉,只保留“输入—求解—输出”的主干,然后在注释里写清楚输入文件格式和依赖库。一个能跑、有注释、能复现结果的代码,比几千行乱糟糟的代码有价值得多。另外,代码文件的命名要规范,比如model1_optimization.py、model2_montecarlo.py,不要叫final_final2.py,评阅人看了会头疼。
5.4 排版工具建议:LaTeX还是Word
每年都有队伍在最后一天被排版逼疯。我的建议是:如果团队有任何人会用LaTeX,就优先用LaTeX。美赛有现成的模板,公式排版漂亮,而且能自动处理交叉引用。不会LaTeX也没关系,用Word加MathType也能做,但一定要在开赛当天就建立好文档结构,把摘要、问题分析、模型假设这些空章节先写好,然后每天往里面填内容。
这里还有一个第零章的技巧:在论文最前面放一页“Summary Sheet”,也就是美赛要求的不超过一页的总结页,实际上就是摘要的扩展版。你的团队信息、问题重述、模型概述、核心结论,都要压缩在这一页里。这一页就是评委最先看的内容,很多人写到这里才发现“我们模型还没讲清楚”,所以我会建议团队在比赛第48小时左右就开始起草Summary Sheet,逼自己把模型逻辑先理顺。
6. 实战中的坎:那些年我们踩过的坑
6.1 模型太复杂,跑不出数
这是新手队伍最容易犯的病:一开始就上深度学习、多智能体强化学习,结果调参调到交卷前夜还不出图。我的原则是“先简后繁”,第一天先用最简单的模型跑通全流程,比如把优化问题先去掉约束跑一遍,或者把动态模型先固定参数跑一遍,只要全流程能出数,再逐步加入条件、约束和不确定性。这个方法能保证你永远有一个“保底结果”,不至于最后一天交白卷。
6.2 数值解不收敛、图像振荡
用有限差分法解偏微分方程时,最容易遇到数值发散问题。我们当时解决的办法很简单:检查稳定性条件。比如显式格式要求$\frac{D \Delta t}{\Delta x^2} \le 0.5$,只要这个参数超过临界值,数值解就会报废。所以每次写差分循环之前,我都会先把稳定性系数打印出来检查一遍,养成习惯后基本不会再栽在这上面。
如果你发现连续改小步长也没用,那就要考虑是不是边界条件出了问题。比如扩散方程在边界处没有正确设成零通量,数值也会在边界积累。这个时候不要硬调参数,先回头检查边界条件的离散方式。
6.3 数据缺失太多,模型没法用
B题给的数据有时候会故意“少给”一些关键变量,考验你能否自己生成或估计。我见过最靠谱的处理方式有三种:一是用插值或中位数填充;二是用相关变量建立一个简单回归来预测缺失值;三是把数据缺失当成模型中的不确定性,在蒙特卡洛模拟中随机生成缺失值。第三种方式最好用,因为它把“缺数据”从劣势变成了“考虑数据不确定性”的优势,评委反而会觉得你想得全面。
6.4 队友分工失衡,写作成了短板
备战时,我强烈建议在队伍里固定一个“代码手”、一个“建模手”、一个“论文手”,但三个人都要参与问题拆解。最怕的情况是建模手和代码手讨论了三天,论文手完全跟不上,最后一个人用一天时间憋出二十页论文,质量自然堪忧。我的习惯是每天晚饭后开15分钟同步会,三个人轮流讲“今天做了什么、模型哪里要改、论文哪里需要补”。哪怕论文手不懂代码细节,也要让他听懂模型假设与结论之间的逻辑,这样才能写出连贯的叙述。
6.5 常见问题速查表
| 问题现象 | 可能原因 | 解决办法 |
|---|---|---|
| 程序运行极慢 | 循环嵌套太多,数据量过大 | 用numpy向量化替代Python循环,或用稀疏矩阵 |
| 优化结果不稳定 | 初始值不好、局部最优 | 换differential_evolution,或多随机重启 |
| 图表中文乱码 | 默认字体不支持中文 | 改用英文标签,或用中文字体设置 |
| 最终结果与直觉不符 | 假设条件过强、参数错误 | 逐段调试,打印中间变量 |
| 队友之间Git冲突 | 没有及时提交合并 | 使用共享网盘或仓库,每天结束后强制合并一次 |
最后再分享一个小技巧,也是我自己打比赛的真实体会:不管题目多烧脑,一定要留出最后一个晚上专门精读整篇论文,把自己当成评委从头看到尾,重点检查摘要是否能独立成立、每章之间是否有逻辑断裂。很多时候,只差这一步,名次就能从二等奖跳到一等奖。这个习惯我保持了三年,每一次都救命。希望你们2026年也能稳稳地把题目咬下来,打完收工那一刻,你会觉得这96小时过得比一个月都值。
