1974 字
10 分钟
CSP-J/S比赛时间分配
2026-01-04

在 CSP-J/S复赛机试中,很多选手并不是因为算法能力不够而落榜,而是因为考场时间分配不当

CSP-J 机试时长为 3.5 小时(210 分钟),CSP-S 机试时长为 4 小时(240 分钟),包含 4 道题目,总分 400 分。如何在有限的时间内将自己的代码能力转化为最大的分数?

本文将为你梳理一套经过无数高分选手验证的 “210 分钟黄金四阶段分配法”,并针对 CSP-J(普及组)与 CSP-S(提高组)提供差异化的夺分策略。


一、210 分钟黄金四阶段分配法#

将 3.5 小时按功能划分为四个阶段,能有效避免“前期磨蹭、后期慌乱”的尴尬局面:

[00:00 - 00:15] 阶段一:准备与全面审题 (15 min)
[00:15 - 01:30] 阶段二:斩首行动,拿下基准分 (75 min)
[01:30 - 03:00] 阶段三:攻坚与暴力抢分 (90 min)
[03:00 - 03:30] 阶段四:合规检查与对拍保命 (30 min)

阶段一:0 ~ 15 分钟 —— 准备环境与全面审题#

目标:建好目录、解压题目、通读 4 道题,建立心理难度预期。

  1. 配置环境:创建好考场要求的选手文件夹(如 GD-0001),检查编译器、VSCode/Dev-C++ 是否能正常工作。
  2. 通读全篇(非常重要!)
    • 不要只盯着 T1 看!花 10~12 分钟把 T1 到 T4 的题目大意、数据范围、输入输出格式全部快速浏览一遍。
    • 关注数据范围:如 N100N \le 100(暗示 O(N3)O(N^3) 暴力或 DP)、N105N \le 10^5(暗示 O(NlogN)O(N \log N) 排序或数据结构)、N20N \le 20(暗示搜索或状压)。
    • 寻找“特殊性质”:有些题目在数据范围里给出了“特殊性质 A/B”,这通常是送分的部分分(Subtask)。
  3. 制定本场策略:根据自己的能力,评估哪几道题是必拿分,哪几道题是争高分。

阶段二:15 ~ 90 分钟 —— 斩首行动,拿下基准分#

目标:拿下 T1(以及 T2 的正解/高分),奠定心理优势。

  • T1 攻坚
    • T1 通常是签到题(简单模拟、基础数学或贪心)。
    • 尽可能在 30 分钟内 写出正解,并用大样例测试通过。
    • 如果写出了正解,顺手写个最简单的暴力(即使是 O(N2)O(N^2) 的),并花 10 分钟做一次对拍,确保 T1 的 100 分绝对不丢。
  • T2 攻坚
    • T2 通常难度适中(贪心、前缀和、二分、基础 DP 等)。
    • 仔细思考 15~20 分钟思路,如果有明确方案,立即动手编写。
    • 如果 80 分钟结束时 T2 还没想出正解,切忌死磕!先写一个可以拿到 50~70 分的暴力/部分分代码,保证进度。

阶段三:90 ~ 180 分钟 —— 攻坚与暴力抢分#

目标:针对 T3 和 T4 搜刮一切能拿到的“部分分”。

竞赛的核心逻辑是**“拿满暴力分 > 盲目冲击不可写的正解”**。

  1. 对待 T3 / T4 的正确态度
    • 大多数非顶尖选手在 T3/T4 上很难拿到满分,但它们的部分分极其丰厚(通常有 30%~60% 的数据是非常弱的)。
  2. 拆解部分分(Subtask)
    • 纯暴力(N15N \le 15:直接写 DFS 或全排列,稳定拿到 20~30 分。
    • 特殊性质:例如“保证树退化成一条链”、“没有负权边”、“K=1K=1 的情况”。针对这些特殊情况单独写 if-else 分支逻辑,又能拿到 20~30 分。
    • 结合在一起:一道原本不会写的 T3/T4,通过“暴力 + 特殊性质”,就能拼出 50~70 分!

30 分钟死锁法则:如果在某道题上尝试一个思路超过 30 分钟没有任何进展,或者调试超过 30 分钟毫无头绪,必须强制停止!立刻转去写暴力或者检查其他题目。


阶段四:180 ~ 210 分钟 —— 合规检查与对拍保命#

目标:防止出现“代码写对了但拿 0 分”的悲剧,做最后的合规审查。

最后 30 分钟绝对不要再试图写新代码或改动核心逻辑! 严格按照以下清单逐一核对:

必查清单(Checklist):#

  1. 文件读写(freopen
    • 是否取消了 freopen 前面的注释?
    • 文件名拼写是否与题目要求一字不差(包括大小写,如 problem.in / problem.out)?
  2. 目录与文件结构
    • 文件夹层级是否正确?例如 GD-0001/title/title.cpp,不能多层或少层文件夹。
    • 源文件后缀名是否为 .cpp
  3. 数据溢出检查
    • 涉及乘法、累加、大数计算的地方是否开了 long long
    • main 函数返回值类型是否为 int 并返回了 0
  4. 数组与内存
    • 数组开得够不够大?(如 N=105N=10^5,数组是否开了 N + 10?有没有少写一个 0?)
    • 数组是否超出了题目内存限制(如 256MB / 512MB)?全局大数组不要定义在 main 函数内部(避免栈溢出)。
  5. 编译与运行
    • 在 NOI Linux 虚拟机或 Windows 命令行下用 g++ -O2 title.cpp -o title 编译一次,检查是否有编译 Warning 或错误。
    • 用重定向运行测试:命令行输入 ./title 或直接双击运行,检查是否生成了对应的 .out 文件。

二、CSP-J 与 CSP-S 策略差异#

由于组别难度不同,考场上的得分侧重点也有显著差异:

1. CSP-J(普及组)策略:攻守兼备,冲刺高分#

  • 题目特点:T1 极简单,T2 较简单,T3 考模拟/DP/大搜索,T4 考图论/复杂 DP。
  • 目标策略
    • T1 + T2(必拿 200 分):要求用时不超过 75 分钟,且必须100% 保证正确率(强烈建议对拍)。
    • T3(争 100 分):T3 经常是复杂的模拟题或大搜索。题目读懂后冷静写,注意细节处理。
    • T4(拿 30~50 暴力分):写出基础搜索或部分 DP。
    • 预期得分:200 ~ 300+ 分(稳拿一等奖)。

2. CSP-S(提高组)策略:稳扎稳打,暴力为王#

  • 题目特点:T1 经常出现“看似简单实则有坑”的题目,T2~T4 难度递增,思想性极强。
  • 目标策略
    • T1(稳拿 100 分):T1 是决定命运的关键。分配 45~60 分钟,哪怕写得慢一点,也一定要保住这 100 分。
    • T2(冲正解 / 拿 60+ 分):思考 30 分钟,有思路就冲正解;没思路快速写出 50~70 分的部分分。
    • T3 + T4(稳定搜刮 60~100 分):不要放弃这两题!每道题认真阅读数据范围,把“暴力 + 特殊性质”写满。
    • 预期得分:100 (T1) + 60 (T2) + 30 (T3) + 30 (T4) = 220 分(在绝大多数省份足以高分锁定一等奖)。

三、考场心态与应急预案#

  1. 心态崩了怎么办?
    • 如果调试 40 分钟依然输出随机数,或者看完 4 道题觉得全都不会,立刻放下键盘
    • 去洗手间洗个脸,或者闭眼深呼吸 2 分钟。告诉自己:“我不会的题,考场上 80% 的人也不会,拿满暴力我就赢了。”
  2. 时间只剩 40 分钟,但后两题一行还没写?
    • 不要慌!40 分钟足够你写出两道题的纯暴力(DFS / 暴力循环)。
    • 快速读题,找出 N10N \le 10 的数据点,花 15 分钟写一个 DFS;再花 15 分钟写另一个 DFS。最后 10 分钟检查文件。
    • 这样你就能在最后 40 分钟内额外抢回 40~60 分,这往往是决定能否拿一等奖的关键!

总结#

竞赛不是比谁“懂的算法高级”,而是比谁“考场上拿到的分数多”。

牢记 “黄金 210 分钟” 分配法,先保底、再抢分,最后留足 30 分钟做合规检查。祝你在 CSP-J/S 考场上发挥出色,稳定发挥,顺利斩获一等奖!