🇨🇳 国庆集训 · 信息学奥赛 CSP 复赛冲刺专题

《枚举——先枚后优》说课稿 CSP 复赛专题 2 · 90 分钟连堂 · 面向已学完 C++ 基础语法与数组的选手

📚 学段:初中高年级 / 高中 · 信息学奥赛(CSP 复赛方向) ⏱ 说课时长:约 10 分钟 🧩 课型:算法专题集训课

目说课导览

一、说课程 ············· 枚举为什么值得单开一个专题

二、说学情 ············· 会写循环,但不会「砍空间」

三、说教学目标与重难点

四、说教法学法

五、说授课时间与教学准备

六、说教学过程(一个情境 · 六个环节)

七、说板书设计

八、说教学反思

贯穿全课有一条明线与一条暗线:
明线是「先枚后优」——比赛里先用枚举把分稳稳拿到手,再谈优化;
暗线是「建模型 → 砍空间 → 定顺序 → 会判断」四步法。四步法在两道真题上被走了两遍,一遍比一遍快。

开开场白

各位评委老师好,我是第 X 号考生。我说课的题目是《枚举——先枚后优》, 这是国庆集训期间 CSP 复赛冲刺专题的第二个专题课。
今天这道课我要解决的是一个看起来很"小"、实际影响成绩最大的问题: 很多选手的循环写得没问题,但一遇到新题就枚不出来、或者枚得太慢。 下面我从课程、学情、目标重难点、教法学法、时间准备、教学过程、板书设计和教学反思八个方面进行说课。

一说课程

课程定位

为什么值得单开一个专题

把"枚举"从零散技巧上升为方法体系,学生才会在赛场上主动去用; 明确"地基"定位,能让学生理解为什么这节课之后还要连着上回溯与子集枚举, 形成完整的专题链,而不是孤立的一节课。

二说学情

维度现状对本课的影响
知识基础 能熟练写 for 嵌套、数组存取、while 循环;初步接触过枚举题 代码门槛不是主要障碍,思维门槛才是
能力短板 拿到题直接开始写循环,很少先问"要枚举谁、一共多少种情况" 必须在第 1、2 个环节把"先想后写"强制建立起来
典型错误 用 int 存大答案、取模忘加 n、死循环不判终止、数组开小越界 这些错误必须在真机上被抓出来,讲一遍是不够的
心理特点 集训期连续上课,注意力容易下滑;但对"能立刻看到评测结果"的上机环节兴趣高 用椰程信奥 OJ 的即时反馈作为课堂节奏调节器
水平差异 有的学生 5 分钟写完,有的学生读题就要 5 分钟 同一道题设置"基础通关 + 进阶变式"两级任务
学情分析的结论直接决定了本课的形态:不靠讲,靠"想 — 走 — 写 — 判"四步闭环。 因为学生的短板在"想清楚"而不在"写得出",所以课堂必须留出让学生自己说出枚举要素、 自己用手指走一遍网格、自己看着评测结果回头改代码的时间。

三说教学目标与重难点

教学目标(对应信息学奥赛核心素养:算法思维 · 建模能力 · 工程实现 · 自我检测)

维度目标可观测的行为
建模能力能对一道新题说出"枚举要素是什么、一共有多少种情况"读题后 1 分钟内能列出要素与规模估算
算法思维能判断枚举空间是否需要、以及如何压缩能说出"哪些情况根本不用枚举"并给出理由
工程实现能独立写出无边界错误、无溢出、无死循环的枚举代码两道真题在 OJ 上 AC 全部测试点
自我检测养成"先看数据范围 — 再估复杂度 — 最后动手写"的习惯提交前能完成四项自查清单

教学重点

教学难点

重难点都落在"说出来、走出来、提交出来"这类可观测行为上,而不是"理解枚举思想"这种不可检验的表述。 难点一用铺开图 + 手指走位破解,难点二用单步模拟器 + 椰程信奥即时评测破解—— 后续每个教学环节都对应到这两个具体难点,不做无效热闹。

四说教法学法

方法具体做法对应难点
问题链驱动法每个环节用一组递进追问推进:"枚举谁?→ 一共多少种?→ 要不要全枚?→ 怎么写不出错?"难点一(思维)
可视化具身法把 4×4 网格铺开成 8×8,学生上台用手指沿着走位,"绕回去"变成身体记忆而非口头规则难点一(思维)
单步模拟法传送带一题用互动课件逐步"走一步 / 自动走",在图形回到起点的瞬间按暂停难点二(工程)
错误前置法易错辨析先全班举手表决再揭晓,让错误前概念先暴露,再对症纠偏难点一、二
即时评测法两道真题当场在椰程信奥 OJ 提交,用评测结果替代教师判对错难点二(工程)
学法:先想后写草稿纸上先写"枚举要素 + 情况总数 + 复杂度估算",教师检查后再允许动键盘四大目标
六种方法不是并列罗列,而是一一对应到具体难点与具体环节: 可视化具身法专治空间想象,单步模拟法专治终止判断,即时评测法专治"自以为对"。 这样设计的好处是——如果某个难点没突破,我可以精确定位是哪一个环节失效,而不是笼统地"再讲一遍"。

五说授课时间与教学准备

时间分配(90 分钟连堂)

环节内容时间
①情境导入:从"上次复赛 T1 你拿了几分"切入,立起"先枚后优"的价值观5′
②环节一:枚举是什么 + 四步法10′
③环节二:枚举的常见题型地图(四类八小类)8′
④环节三:真题一 [ABC258B] 数字盒子(读题 → 铺开推演 → 八方向枚举 → 方向数组 → 代码走读 → 现场提交)25′
⑤环节四:真题二 [ABC265C] 传送带(读题 → 单步模拟 → 判环 → 代码走读 → 现场提交)25′
⑥环节五:易错辨析(四条判断先投票后讲理)7′
⑦环节六:小结知识树 + 当堂检测 3 题10′
合计90′

教学准备

备课的重心不在"准备多少页 PPT",而在准备可被评测的题目与数据。 两题共 25 个测试点、覆盖样例与所有典型边界(N=1、1×1 网格、单行单列、25 万步长路径、两类成环), 目的是让学生踩的每一个坑都能被数据精确抓到,而不是"样例过了就以为对了"。

六说教学过程

环节① 情境导入(5′)——把"枚举"和分数绑在一起

"国庆集训第二天我们聊一个大家都觉得很简单、但每次都拿不全分的专题——枚举。 我先问一句:上次复赛,T1 你拿了几分?满分 100 分,有多少人不到 60?
很多同学的问题是:想的正解想不到,随手写的暴力又不敢交。 今天我要教的就是——怎么在赛场上把能拿的分稳稳拿住:枚举写对,就是保底。"
(投影本课目标)"下课时,你要能自己说出三句话:枚举什么?砍掉哪些?怎么写到不出错?"
用真实比赛分数制造需求感。学生不排斥枚举,但常常"看不起枚举"—— 总觉得枚举是笨办法。把枚举和"稳拿分"直接绑定,是本课价值观层面的脚手架, 后面所有环节都建立在这个共识上。

环节② 枚举是什么 + 四步法(10′)

(出示定义)"枚举就是把所有可能的答案一一列举出来再加以判断,又叫暴力枚举、穷举。 判断的标准只有两条:穷尽——不重不漏;判断——每一个候选都能验真假。"
"但只会'全部试一遍'是不够的,真正的四步法是——建模型、砍空间、定顺序、会判断。 第一步问'枚举谁';第二步问'范围多大、哪些根本不用枚';第三步问'从哪边开始枚'; 第四步是把它写成不出错的代码。"
(互动)"屏幕上三个步骤被打乱了,谁能上来按正确顺序点一遍?"
四步法(3 步 + 工程落地)是本课的主结构,后面两道真题都要回来指认这四步。 把"会判断"独立成第四步,是为了防止学生把枚举当成纯思维题—— 复赛丢分往往不在思路,而在这最后一步的工程细节上。 排序互动虽然简单,但能立刻把"哪一步最关键"这个问题抛给全班。

环节③ 枚举的常见题型地图(8′)

"枚举不是一个孤立技巧,它有一张地图。四大类:基础枚举(数值枚举、字符串枚举)、 组合枚举(子集枚举、排列枚举)、算法结合(枚举 + 贪心、枚举 + 动态规划)、 场景枚举(生活场景、游戏场景)。"
(请学生先自己归类,再点开卡片校对)"今天两道真题都落在最基础的一格—— 数值与网格枚举。它是全套题型的地基;子集和排列枚举,我们留到后面的回溯专题。"
这张地图的作用是"定位":让学生知道今天学的位置在哪里、后面还会往哪里去。 同时明确告诉学生"今天只打地基、不贪多",避免学生在课上分心去纠结子集与排列, 保证 25 分钟的真题精讲时间不被稀释。

环节④ 真题一:[ABC258B] 数字盒子(25′)

第一步 · 读题并登记要素(4′)

"N × N 数字网格,上下相连、左右相连。选一个方向,从任意格出发走 N−1 步,一共经过 N 格, 把数字按顺序拼成整数,求最大值。"
"先别写代码。请在学案的登记表上填:枚举谁?多少种情况?怎么判断?"

第二步 · 铺开图推演"为什么是 9786"(5′)

"网格上下左右是循环的,所以我们把 4 组数据粘起来,把 4×4 铺成 8×8。 从第 2 行第 4 列的 9 出发,朝右下走三步:9 → 7 → 8 → 6,拼成 9786。
注意第三步——走出了右下角,靠左右相连加上下相连,绕回了左上角。 (请一位同学上台在铺开图上用手指走一遍)"
这是全课最难的空间想象点。学生算错 9786,多半不是拼数错,而是没把"越界绕回"当成规则内化。 用手指在铺开后的 8×8 图上走一遍,比讲十遍"要取模"都有效—— 因为铺开图上"绕回去"是可见的,而正式网格上它是不可见的。

第三步 · 八方向枚举演示(5′)

"课件上点数字可以换起点,点下面的按钮可以换方向。请三位同学轮流上来试, 其他人把'起点 + 方向 + 拼出的数'记在草稿纸上。全班一起找出最大的那一个。"
让学生亲眼看到"换方向答案就变了",从而理解"方向也要枚举"这一点。 同时把手动枚举 128 种情况的体感建立起来——只有体验过"枚起来不累", 才会在学生心里种下"这题为什么可以放心枚"的判断依据。

第四步 · 代码走读与易错点(6′)

"三层循环:外面两层是起点,里面一层是方向;每个方向里再走 N−1 步,边走边拼数、边走边取模。 三处关键:起点每个方向都要重置、拼数必须用 64 位整数、取模要加 n 防负数。"
"特别注意:视频里把起点写在方向循环外面,在本题的环形网格上其实恒正确—— 因为环面上的平移是双射,无论 N 是几、走几步,绕完 8 个方向仍覆盖全部 N²×8 种组合。 但它只在网格首尾相连时成立;普通(有墙)网格里起点会漂移、大量组合被跳过而直接出错。 所以工程上一律写在方向循环内部——不是'视频侥幸',而是'下一题多半不是环形'。结果正确 ≠ 写法可迁移。"
这里我做了一个刻意的选择:不回避原课代码的写法争议,而是把它变成一个认知节点。 讲清"为什么在环形网格恒对"和"为什么普通网格必崩、不能盲目照搬",比直接说"视频写错了"更有价值—— 学生学到的是"正确性要有理由,不能靠运气",这正是竞赛选手最需要的心智习惯。

第五步 · 现场提交(4′)

"现在把代码交到椰程信奥的 ENUM258B。目标是 12 个测试点全过。 如果只过了前 4 个(30 分),说明样例和小数据没问题,出错的就在大答案或边界上——对照屏幕上四项自查再改一次。"
分档给分的设计在这里发挥作用:得分本身就是诊断信息。 只拿 30 分的学生,教师不必逐个看代码,直接指向"64 位 / 取模 / 边界"三个方向即可, 把巡视时间用在最需要的学生身上。

环节⑤ 真题二:[ABC265C] 传送带(25′)

第一步 · 读题 + 手走样例(6′)

"H 行 W 列网格,每格写着 U、D、L、R,表示站在这一格时往哪边走。从 (1,1) 出发一直走, 走不动就停,输出停住时所在的格子;如果永远走不停,输出 −1。
先别讲解法。请在草稿纸上把样例 1 的路线写出来——你会发现它绕了几圈,但还是停下来了。 再看样例 2——它是真的转不完。"
先制造"停得住"与"停不住"的对比,学生才会自己追问:凭什么说它停不住? 这个自发的疑问,正是引出标记数组的最佳时机——比教师直接抛出"用 vis 判环"有效得多。

第二步 · 单步模拟:抓住判环的瞬间(6′)

"屏幕上可以走一步、后退一步、也可以直接走到底,速度还能调快慢。先用样例 1 一步步走完, 全班一起报坐标;再切到样例 2 自动走,盯紧格子——当它又回到 (1,1) 的那一刻,我按暂停。 请你说:为什么可以断定它永远停不下来?"
(引导学生说出:"因为它会一模一样地再走一遍。")
"会不会判环"是这题的分水岭。让环的闭合发生在学生眼前,再让学生自己说出"一模一样地再来一遍", 就是把"标记数组"从一个语法技巧转化为一个逻辑必然。 到这里学生才能理解:状态只有"在哪一格",重复即循环。

第三步 · 代码走读 + 两连问(7′)

"一个 while,三个出口:判环输出 −1、出界输出当前坐标、否则继续走。 注意顺序——先用 nx、ny 试探,先判出界,再决定要不要真的前进,这样数组下标永远不会越界。"
"第一问:这题为什么不能用 BFS?答:路线由格子字符唯一确定,它不是求最短路。 第二问:最多走多少步?答:不超过 H×W,因为重复就成环——25 万步,毫秒级。"
这两问针对复赛两个高频丢分点:模型选错(拿 BFS 硬套)与不判终止(死循环 TLE)。 顺便用"25 万步毫秒级"做一次复杂度估算示范,把"先估复杂度再动手"的习惯落到具体数字上。

第四步 · 现场提交(6′)

"交到 ENUM265C,13 个测试点。注意你输出的是移动前的格子——输出成移动后的,样例 1 就会变成 1 4。"
此处强调"输出移动前的格子",因为这是本课第二个工程难点, 且用样例对照(1 3 与 1 4)能让学生瞬间自检,不必等评测结果。

环节⑥ 易错辨析:先投票,再讲理(7′)

"四句话,先举手表决,再给理由。"
① 枚举就是最笨的暴力,能不用就不用。(错)
② 数字盒子里,方向循环内部的起点必须重新赋值。(对)
③ 传送带里走到已访问的格子就说明进了死循环。(对)
④ 先判访再判出界,反正数组开大点就行。(错)
这是本课的纠偏环节,四条判断分别对应本课四个最易出错的认知点: 对枚举的价值观、起点重置、判环条件、以及"把正确性寄托在数组大小上"的投机习惯。 先投票是为了让错误前概念暴露出来;如果全班都觉得第①条"对", 说明环节①的价值观铺垫没有打透,需要在总结时再补一句。

环节⑦ 小结与当堂检测(10′)

"最后请大家合上课件,我们把这棵知识树一起画出来——主干是枚举,穷尽加判断; 四条分支是建模型、砍空间、定顺序、会判断。"
"今天带走一句话:先把答案空间想清楚,再把空间的边界砍下来;能枚就枚,枚完再想优化。"
"接下来三道速答,答完就上机完成两题。"
小结不照读,由学生口头补全五条要点,说不出的当场翻回对应页面。 当堂检测三题分别考"起点不重置的后果""输出哪一格""判环怎么判",与前面的易错点一一呼应; 接着衔接上机,形成"讲 — 辨 — 测 — 练"的完整闭环,保证下课时每个学生手上都有一次真实提交记录。

七说板书设计

黑板左侧为知识主线(随课生成,不预先写满),右侧为现场生成的示意图。

左列 · 知识主线右侧 · 现场板图
枚举 穷尽 + 判断

四步法
① 建模型:枚举谁?多少种?
② 砍空间:范围?哪些不必枚?
③ 定顺序:前往后 / 后往前
④ 会判断:拼数 · 取模 · 判环

真题一 数字盒子
起点 N² × 方向 8 → 8N² 种
环形偏移:(x+dx+n) % n
答案用 long long
真题二 传送带
不枚举,照格模拟
vis 判环 → −1;出界 → 输出当前格
① 一个 4×4 网格手绘,把右下角的路线连出来,箭头绕到左上,旁边写 9→7→8→6;

② 铺开的 8×8 简图,标出"绕回去"的接口;

③ 传送带的 2×3 小网格,画出一圈回到 (1,1) 的闭合箭头,旁边写 −1;

④ 一句话结论框:能枚就枚,先拿分再优化
板书分左右两栏,是"逻辑 + 直观"的双通道:左栏让学生带走一套可复用的方法(结构化表达), 右栏让学生带走两个可回忆的具体画面(视觉锚点)。 右栏的两个板图都不是备课时预先画好的,而是随学生推演过程现场生成—— 现场画出来的图,学生的注意力与记忆强度都明显高于投影好的图。

八说教学反思

预期亮点

可能出现的问题与预案

风险预案
学员水平差异大同一题设两级任务:基础任务是 AC 全部测试点;进阶任务是把"移动步数"改成输入给定的 K 步,重新分析枚举覆盖面是否变化。先完成的同学去做进阶,不空等。
上机时间被压缩保底砍法:环节③题型地图压缩到 3 分钟(只留四大类名称),环节⑥易错辨析改为课后在题单里作答,确保真题二留足 25 分钟。
评测机排队或断网课件内置模拟器承担推演部分;教师用本地标程现场运行代替在线评测,课后把提交任务布置到题单,下一节课先看榜。
学生对枚举"不服气"不辩论,直接给数据:用课件展示"8N² ≤ 800 次操作"的规模,再反问"这个规模需要优化吗"。用事实代替说教。

后续改进方向

教学反思写在说课稿里,是为了证明这节课的每一个设计选择都有可检验的后续动作: 亮点对应可复制的经验,预案对应可执行的操作,改进方向对应下一次课的题库与节奏调整。 反思不停留在"效果良好"这类表述上。

结结束语

这一节课,我用一个"稳拿分"的真实需求立起价值观,用一条四步法串起全课结构, 用两处可视化推演突破两个难点,最后用 25 个测试点把"自认为对"变成"测得对"。
明线是"先枚后优",暗线是"建模型 → 砍空间 → 定顺序 → 会判断"。
我的说课到此结束,感谢各位评委老师的聆听,恳请批评指正!

附使用提示与答辩预案

一、限时取舍(按说课时间切换)

限时取舍建议
10 分钟按本稿完整口播;教学过程按"环节①一句 + ②③各两句 + ④⑤各 1 分半 + ⑥⑦各两句"分配,两处难点各留一处停顿。
8 分钟舍弃环节③题型地图,环节⑧教学反思只讲"亮点三"与"上机时间被压缩"两条预案。
5 分钟只讲三大块:学情与难点(为什么难)、教学过程的两处可视化推演(怎么破)、题库与评测设计(怎么验)。

二、答辩三问预案

问 1:两道真题都是原题,为什么不自己出题?
答:集训前期必须用高质量原题建立标准。这两题分别代表"枚举要素两层叠加"和"枚举退化为循环模拟"两种典型形态, 原题的题面表述、数据强度、边界设计都是经过验证的;在此阶段引入自命题, 反而会把学生的时间消耗在题面歧义与数据漏洞上。自命题放在集训后期的模拟赛环节,那时才有对照标准。
问 2:直接删掉环节③题型地图,会不会知识不完整?
答:题型地图在本课的功能是"定位",不是"教学"。四大类里今天真正落地的是基础枚举, 其余三类(子集、排列、算法结合)都属于后续专题的内容。 本课的价值在于把基础枚举这格地基打穿,而不是每个格子浅尝一遍; 地图的存在是为了让学生知道自己站在哪里,压缩它不影响本课目标的可达成性。
问 3:本课相对于常规枚举课,创新在哪里?
答:三点不同。第一,把枚举结构化为四步法,并让"会判断"成为独立的一步—— 直指复赛丢分的主因(工程细节而非思路);第二,用可评测的真实题库(25 个测试点、分档给分) 替代传统例题讲解,让"得分成为诊断信息";第三,对原课代码中"只在环形网格成立"的写法做了公开辨析, 把学生的正确性观念从"样例过了"推进到"有理由地正确"。三点都指向同一个目标: 让选手在赛场上真的敢交、交了真的对。

三、配套材料