国庆真题精讲特辑 · DAY 2 / 5 · CSP-J
真题精讲①|CSP-J 2023:T3 一元二次方程 + T4 旅游巴士
从今天起,每天的真题精讲都按 "2 题连讲" 来:一篇吃透两道题,面向对象主要为初次参加CSP-J/S认证的新手,力求通过真题的融会贯通能够提升本次认证的落地提分 。第一天讲入门组(CSP-J)2023 年的 T3、T4:一道是稳拿分的大模拟,一道是拉开差距的最短路。带孩子一天把"基础"和"进阶"都过一遍。
题目一:T3「一元二次方程」
这道题是 CSP-J 里非常典型的大模拟题——考的不是多高深的算法,而是孩子把规则翻译成代码、并处理精度的细致程度。
一、真题重现(通俗版)
给定整数 a, b, c,求解一元二次方程 ax² + bx + c = 0。要求按规定的精度输出实根:有两个不等实根时从小到大输出两个;有两个相等实根时只输出一个;无实根则输出指定提示。输出时要用特定的四舍五入规则处理小数位。
(原题还有"保留到第几位、舍入到最近偶数"等细节约定)
二、考点定位
大模拟 + 数学 + 浮点处理。核心就三步:判判别式 Δ = b² − 4ac 的符号;按要求求根;按规则格式化输出。难点全在"格式与精度"上,而不是解方程本身。
三、思路拆解(分步点拨)
1. 算 Δ,若 Δ < 0 → 无实根,按格式输出提示。
2. 若 Δ = 0 → 一个重根 x = −b / (2a);若 Δ > 0 → 两个根,先排序再输出。
3. 关键在输出:用四舍五入(或直接用题目要求的取整方式)把根处理到指定位数,注意负数、进位、末尾 0 的取舍。
👉 给孩子的小任务:先手写"判 Δ → 求根 → 格式化"的流程,再对照标准写法检查边界(如 a 为负、根恰好为整数)。
四、易错预警
⚠️ 坑 1:用浮点算 Δ 判正负,结果因为精度误差把"Δ = 0"判成了"< 0"或"> 0"。必要时用整数/高精度方式判符号。
⚠️ 坑 2:输出格式(位数、舍入方向、相等根只输出一次)没读清,样例过了但测点全错。
⚠️ 坑 3:两个实根谁大谁小没排序,输出顺序反了丢分。
题目二:T4「旅游巴士」
T4 是当年入门组的"压轴题",也是很多孩子分水岭。它把"最短路"和"时间约束"揉在一起,但思路一旦捅破,并不恐怖。
一、真题重现(通俗版)
有 n 个景点、m 条单向道路,每条路在某个时刻后才开放(开放时间 aᵢ)。从 1 号景点出发到 n 号,要求经过的步数恰好是 k 的倍数,问最早几点能到达。不能在景点停留等待,必须连续移动。
二、考点定位
最短路 + 时间/步数状态建模(分层图或二分答案 + BFS)。本质是:把"走到某点、且当前步数 mod k 是多少"作为一个状态来跑最短路。
三、思路拆解(分步点拨)
1. 状态设计:记 dis[u][r] = 到达点 u 且步数 mod k = r 时的最早时间。
2. 走一条边 (u→v,开放时间 a):如果在当前时间 t 已经开放,就走;否则要等下一轮(k 的整数倍周期)才能走。
3. 用优先队列(Dijkstra 思路)按时间从小到大扩展状态,直到到达 n 且步数 mod k = 0。
👉 给孩子的小任务:先想清楚"为什么只关心步数 mod k 而不是总步数",再试着写出状态转移。
四、易错预警
⚠️ 坑 1:试图用普通最短路(只记到达时间)忘了"步数必须是 k 的倍数"这个约束。
⚠️ 坑 2:"不能停留等待"被误解成"可以原地等",导致状态转移出错。
⚠️ 坑 3:等待轮数的计算(ceil 向上取整)写错,边界如 k = 1 没特判。
💬 互动:这两道题,你家孩子 T3 能稳拿、T4 有思路吗?留言说说,教练会在群里挑典型问题统一答疑。
📮 想要完整题解?
回复关键词「真题」可领近 5 年 CSP-J/S 复赛真题合集。
▍免责声明
本文题解为教练团队基于公开真题的讲解,仅供参考学习,不构成任何培训承诺;真题最终以 CCF 官方公布为准。本号仅作信息分享,不对其内容与服务质量作担保。