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

《枚举——先枚后优》教学设计 CSP 复赛专题 2 · 90 分钟连堂(2 课时) · 面向已掌握 C++ 数组与多重循环的选手

🎯 课型:算法专题新授课 + 上机实践课 💻 环境:机房 + 椰程信奥 OJ 在线评测 📺 参考课例:B站 BV1NWnczEE9Z《CSP复赛专题2-枚举》(12′47″)

基一、教案基本信息

课题枚举——先枚后优(CSP 复赛专题 2)
学段 / 对象初中高年级 · 高中(CSP-J/S 复赛方向集训队) 前置基础C++ 基础语法、一维与二维数组、多重循环、字符与整数转换
课型算法专题新授课 + 上机实践课 课时2 课时连堂,共 90 分钟(亦可拆为 45′+45′)
教学环境机房(每人一机)、投影、椰程信奥 OJ 题库(题号 ENUM258B / ENUM265C)
教材依据 ① CCF《CSP-J/S 认证大纲》入门级「基础算法」条目中的枚举(穷举);
② 《普通高中信息技术课程标准(2017 年版 2020 年修订)》选择性必修《算法初步》模块—— 「通过具体案例理解枚举、递推等基本算法思想,分析算法的时间效率,并用程序设计语言实现」。
(以上为概括性引用,非逐字原文;集训讲义以本校下发的最新大纲为准。)
配套资源 互动课件 HTML(14 页) 说课稿 椰程信奥题目包 zip 原题与答案.md

源二、参考课例时间轴还原

课例来源:B站 BV1NWnczEE9Z《CSP复赛专题2-枚举》,时长 12′47″(767 秒),UP 主「呆呆小可旺」。 课例为幻灯片微课(非课堂实录),以下时间轴由逐帧抽图识读还原,作为本教案的环节设计依据。

时间点环节内容要点本教案对应
0:00封面「CSP 复赛专题 · 专题2-枚举」—
0:45枚举是什么 + 三步骤暴力枚举/穷举定义;建模型 → 减空间 → 选顺序环节②(扩为四步法)
1:30枚举常见题型四大类八小类:基础枚举(数值/字符串)、组合枚举(子集/排列)、算法结合(+贪心/+DP)、场景枚举(生活/游戏)环节③(题型地图)
3:20真题一 题面[ABC258B] 数字盒子:N×N 循环网格,8 方向,走 N−1 步拼数,求最大环节④(25′)
4:45铺开推演把环绕后的网格横向铺开 4 组,示范「为什么答案是 9786」
5:15代码走读方向数组 + 三重循环 + 取模环绕;起点变量写在方向循环之外
9:10真题二 题面[ABC265C] 传送带:H×W 网格按格中箭头走,求停点或 −1环节⑤(25′)
9:40推演「为什么是 −1」走进环里就永远出不来
10:00代码走读vis 标记数组判环;先判出界再前进
12:20收束回到「枚举三步骤」收尾环节⑦(小结)
本课例的两处局限,本教案已针对性补强:
① 课例为录播讲解,缺少学生思维暴露与形成性反馈——本教案在环节③、⑥各增设一次「先投票、后讲理」,共 8 处即时判分;
② 课例代码把起点变量 int x=i, y=j; 写在方向循环之外。这种做法在环形网格上其实恒正确(环面平移一一对应、每个格子恰好走到一次,与步数、N 是否互质无关), 只有换成普通(有墙)网格才会漏组合、出错(详见环节④「易错预警」)。 本教案按「理解它为何在环形网格恒对、但工程上仍一律写在循环内部」处理,把它转化为一个迁移性认知教学点。

情三、学情分析

维度现状教学对策
已有基础 能熟练写 for 循环、二维数组下标访问;做过「百钱百鸡」「水仙花数」一类单层枚举题;会读题面里的输入格式。 起点定在「双层枚举要素」而非「枚举是什么」,避免重复讲授。
主要障碍一
不会拆枚举要素
看到「求最大值」就想找规律、想贪心,不愿意先承认「可以全试一遍」;问「枚举谁」答不上来。 环节②给出四步法卡片,强制先口述「枚举谁 / 共几种 / 能不能砍 / 什么顺序 / 怎么自查」,再动键盘。
主要障碍二
不会估算规模
对 8N³ 的量级没有概念,既不敢枚举(怕 TLE),也敢乱枚举(N=2000 也写三重循环)。 环节②做一次「心算 8N³」;环节③题型地图每张卡片都标上限;环节④⑤各算一次复杂度。
主要障碍三
边界与溢出
取模忘 +N;int 装不下 10 位数;网格题下标越界 RE。 不靠口头提醒,改用测试数据说话:OJ 里专门埋了 N=1、1×1、全 9 卡 int、25 万步蛇形四组边界数据。
动机特点 集训期连续上课注意力易下滑;但对「立刻能看到评测结果」的上机环节兴趣极高。 讲练比控制在 35′讲 : 45′练;两道真题都留「现场提交看 AC」的收口动作,形成即时反馈闭环。

标四、教学目标(信息学学科核心素养四维)

核心素养本课达成目标(可观测)
信息意识 读完题面后能在 30 秒内判断「这题值不值得枚举」:先估规模,再看数据范围,而不是凭感觉。
计算思维 ① 能把「所有可能」形式化为可遍历的要素组合(起点 × 方向 → 8N² 种);
② 会用 num = num*10 + 位 与 (x+dx+N)%N 两个建模原语;
③ 能用「完全确定的路线 + 状态重复」识别循环并判环。
数字化学习与创新 能借助课件里的八方向枚举器、传送带单步模拟器验证自己的猜想;会用 OJ 的分组数据定位自己错在哪个子任务,而不是只看总判。
信息社会责任 能说出「结果正确 ≠ 写法可迁移」:能解释视频代码为何在环形网格恒对、却在普通网格必崩,主动写可解释、可迁移的实现。
四维目标不是并列罗列:信息意识与计算思维是本课的主目标,数字化学习与创新是达成手段(贯穿上机环节), 信息社会责任落在环节④的「视频写法辨析」与环节⑥的投票上,属于价值观落点。四个维度各有对应的可观测行为,便于课后复盘时逐条打勾。

难五、教学重点与难点

教学重点
  1. 枚举四步法:建模型(枚举谁 + 一共多少种)→ 砍空间 → 定顺序 → 会判断。
  2. 双层枚举的写法:起点 × 方向,方向循环内部重置坐标。
  3. 循环模拟 + 判环:vis 标记数组,先判出界再前进。
教学难点
  1. 难点一(思维):从「求最优」的直觉转向「先承认可以全试一遍」,并自己估出规模上限。
  2. 难点二(实现):环形边界的取模处理与长整型溢出,两者都会「样例过、提交崩」。

难点突破策略

难点突破策略落地动作(本课具体安排)
难点一
(思维转向)
问题链驱动:枚举谁?→ 一共多少种?→ 要不要全枚?→ 怎么写不出错? 环节④用课件「八方向枚举器」让学生自己点出 9786,教师只提问不给结论;环节②板书四步法卡片全程不擦。
难点一
(规模估算)
数量级心算:把 8N³ 落到「N=10 不到 1 万次」这种可感知的量。 环节②板书右侧画「8N² ≤ 800 / 8N³ ≤ 8000」对照;环节⑤再算一次 O(HW) ≤ 25 万。
难点二
(环形取模)
可视化先行:先把环绕网格横向铺开成平面图,再谈取模。 沿用课例 4:45 的「铺开」做法(4×4 横竖各接一份自己,共 2×2 块),课件第 6 页做成「走一步」逐步揭示的铺开图;再讲 +N 的作用。
难点二
(溢出 / 越界)
用测试点制造失败:先让错误写法在 OJ 上真的 WA/RE,再讲原理。 题包内埋 N=10 全 9(答案 9999999999,卡 int)、1×1 网格、25 万步蛇形三组「照妖镜」数据。

备六、教学准备与材料清单

类别清单缺失时的廉价替代
软件/平台 椰程信奥 OJ(已导入 ENUM258B、ENUM265C)、Dev-C++ / VS Code + g++、投影 无 OJ 时用「本地 1.in/1.out 文件对拍」:把题包 testdata 解压发给学生对着跑,判分靠 fc 比对。
课件 互动课件单文件 HTML(14 页,零外部依赖,断网可用) 提前拷贝到教师机本地磁盘 + U 盘双份;断网不影响任何交互模块(含枚举器与模拟器)。
教具 4×4 磁贴数字方格(演示环绕)、8 方向罗盘贴纸、传送带箭头磁贴一组 用 A4 纸打印网格 + 便利贴:数字写便利贴可撕可换;方向罗盘用纸盘画米字格。
纸质材料 枚举四步法卡片(每人一张)、课堂检测 3 题答题纸 直接印在讲义背面;或用课件第 16 页当堂检测投屏口答。
分组 2 人一组(异质搭配:一名「敢写」配一名「细」) 单人一机亦可,此时把环节⑥的投票改为举手统计,不减信息量。
课前 10 分钟:教师在椰程信奥后台确认两题状态为「公开/可见」,用自己的账号先提交一次标程确认 AC, 并抽查 1.in/1.out 能正常下载——这一步不做,课上极易翻车。

程七、教学过程

整体时间轴(90 分钟连堂)
导入 5′ → 四步法 10′ → 题型地图 8′ → 真题一 25′ → 真题二 25′ → 易错辨析 7′ → 小结+检测 10′
讲练比约 35′ : 45′,另有 10′ 为检测与收束。

环节① 情境导入:枚举值多少分(5′)

环节目标把「枚举」从"最笨的办法"翻转为"复赛里最稳的拿分动作",建立本课的价值观共识。
教师活动
「先看一张账。CSP 复赛四道题,第一题通常是模拟或枚举,满分 100。第一题 AC 的人,二等奖基本就稳了。 而第一题最常考的就是——枚举。所以今天不谈技巧,只谈一件事:怎么把枚举写对、写全、不超时。」
投影课件第 2 页「学习目标 + 课前热身」。不展开讲策略,一句话带过即切页,控制在 90 秒内。
「先做个小投票:给你一把钥匙串,10 把钥匙开一把锁,你会怎么开?」
学生活动

「一把一把试。」

「对,一把一把试——这就是枚举。它笨,但它一定对。今天我们要学的不是怎么变聪明,而是怎么把笨办法做扎实。」
板书
枚举 = 列举所有可能 + 逐个判断
用「分数值不值」开场而非「定义」开场,是因为集训学员对分数敏感,能在一分钟内把注意力收进来。 钥匙串比喻的作用是预先拆掉"枚举 low"的心理防线——后面才敢让学生承认"这题可以全试一遍"(对应难点一)。

环节② 枚举四步法(10′)

环节目标给出可迁移的操作流程;建立「先估规模再写代码」的硬性习惯。
教师活动
投影课件第 3 页四步法卡片;板书同步写下四步,本环节写完不擦,保留整节课。
「枚举不是上来就写三重循环。四步:
一、建模型——枚举哪些要素?各有多少种?必须说出一个数来。
二、砍空间——哪些情况根本不必枚举?先砍掉。
三、定顺序——从前往后还是从后往前?哪个更好写?
四、会判断——写完不算完:结果对不对,写法对不对?」
在第一步停一下,追问:「一共多少种?说个数。」学生答不出就退回上一步重新数。 再追问:「如果算出来是 10 的 8 次方,还枚吗?」留白 3 秒,不急着给答案。

「不枚了……会 TLE。」

「对。先把规模说出来,就是为了防止你在砍之前就写崩。 记住一个量级感觉:1 秒大约能跑 1 亿次简单操作。今天我们所有的题都在 1 万到 25 万这个区间,非常安全。」
第 4 步「会判断」这一分钟先只埋钩子:「今天真题一的代码走读里,会出现一段 交上去能 AC、但写法是错的代码,到时候我们回来兑现这一步。」
学生活动在四步法卡片上跟着填一遍;口算 8 × 10 × 10 = 800 与 800 × 10 = 8000。
即时判分课件第 3 页「四步法排序」小练——把打乱的四步拖回正确顺序,即时判分,全班正确率低于 70% 则重讲一遍。
板书
枚举四步法:① 建模型 ② 砍空间 ③ 定顺序 ④ 会判断
(① 里必须报出一个数字:本题 8N² = 800、8N³ = 8000)
右边对照区:1 秒 ≈ 1 亿次 | 8N²≤800 | 8N³≤8000 | O(HW)≤25 万
课例给的是「三步骤」(建模型 / 减空间 / 选顺序),本课在其后补出第四步 「会判断」,把「结果正确 ≠ 写法可迁移」提升为流程中的一个固定动作—— 它在真题一的代码走读页兑现,也在环节⑥的投票里回收。
同时把课例第 1 步收紧为「必须说出一个数」:这正是学情里最缺的一环(既不估规模就敢乱枚, 又不会估规模而不敢枚)。板书右侧的对照区是本课唯一的"数字锚点", 后面三个环节都要回头指它——让规模估算从事后补救变成事前动作。

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

环节目标建立枚举题的识别图式:看到题面能归入哪一类,从而快速联想到解法骨架。
教师活动
投影课件第 4 页题型卡片,四大类依次点亮,每类只点两个小类名 + 一个例子,不展开讲代码。
「枚举不是只有一种长相,它有四张脸:
基础枚举——数值枚举(遍历区间筛数)、字符串枚举(遍历字符集匹配模式);
组合枚举——子集枚举(位运算/递归)、排列枚举(回溯全排列);
算法结合——枚举 + 贪心、枚举 + DP(枚举关键状态,子问题交给别的算法);
场景枚举——生活场景(活动安排)、游戏场景(网格方向搜索,就是今天的第二题)。」
易错预警 A:「组合枚举」的子集/排列要指数级增长,N 一大就爆。 本环节只要求能认出来,不要求会写——会写是后面专题的事。要求学生在这两类卡片上标一个「⚠」。
学生活动在讲义知识树上,给四张脸各写一句自己见过的题目;邻座互查 30 秒。
即时判分课件第 4 页题型卡片的「点开看解析」:读完例面,先让学生归类再点开校对。
板书
四张脸:基础 | 组合⚠ | 结合 | 场景
本环节是全景扫描而非精讲,8 分钟封顶。它的价值不在记住八个小类,而在让学生 以后碰到新题时有「分类检索」的抓手。⚠ 标记是为了防止学生把指数级组合枚举误当成线性枚举来用。

环节④ 真题一:[ABC258B] 数字盒子(25′)——本课主阵地

环节目标完整走一遍「读题 → 铺开推演 → 建模型 → 编码 → 提交」;突破难点一与难点二。
教师活动 4.1 读题
(3′)
投影课件第 5 页题面;带学生圈出三个关键词:N×N、上下左右相连(环绕)、走 N−1 步。
「'上下边缘相连、左右边缘相连'——这句话什么意思?走到最右边再往右一步,你在哪?」

「回到最左边。」

「这就是环形。我们待会用取模实现它。」
4.2 铺开推演
(5′)
投影课件第 6 页:右侧「铺开后 8×8」把 4×4 横竖各接一份自己,斜向走法在铺开的图上变成一条直线。点「走一步」逐步揭示 9→7→8→6,再回到左侧 4×4 环上指认同一条路线。
「环绕不好想,我们就把它铺平。斜着走 N−1 步,在铺开的图上看就是一条直线段。 谁上来指一条,把经过的数字读出来?」

「9 7 8 6……拼起来是 9786。」

「这就是样例答案。我们没用任何技巧,只是把所有走法都看了一遍。 现在数一数:起点有几个?方向有几个?一共多少种?」

「起点 16 个,方向 8 个,一共 128 种,每种走 3 步。」

板书右侧立刻记下 8N² = 128、8N³ ≈ 512,并回头指环节②的对照区。
4.3 建模型
(4′)
「两个建模原语,今天必须带走:
拼数——num = num * 10 + 当前数字;
环绕——x = (x + dx + N) % N。
为什么要 +N?因为 C++ 里负数取模还是负数,-1 % 4 是 -1 不是 3,下标直接越界。」
现场演示:把 +N 去掉,跑一次,看它 RE。让学生亲眼看到报错再改回来。
易错预警 B(长整型):N=10 时答案最大是 9999999999,10 位数, 超过 int 的 21 亿。中间变量 num 和答案 ans 都必须用 long long。 样例 1 用 int 也能过,样例 2 必 WA——这就是最典型的"样例过、提交崩"。
4.4 方向数组
与编码
(8′)
先投课件第 8、9 页「方向数组」两页(共约 6 分钟,一页信息量已拆薄)。
第 8 页(怎么记、怎么定义)约 3′:① 让学生对着米字格把 8 组 (dx, dy) 逐个念出来; ② 追问「为什么没有 (0,0)」;③ 点右侧对照表任意一行,看米字格联动高亮。
第 9 页(怎么用、要小心什么)约 3′:讲清三个动作(先算 → 判断边界 → 安全才赋值); 六条知识点不逐条讲,只强调「dx 管行、dy 管列」「数组长度必须等于方向数」; 最后点明起点也是枚举要素(这才是 N² × 8 的来源)。
再投课件第 10 页代码(约 2 分钟);不直接给完整代码,先给骨架,方向数组与取模两处留空让学生口述。
// 八方向数组:先写四个角,再补四条边,别写漏
int dx[8] = {-1, -1, -1,  0, 1, 1, 1, 0};
int dy[8] = {-1,  0,  1,  1, 1, 0, -1, -1};

for (int i = 0; i < n; i++)
  for (int j = 0; j < n; j++)
    for (int k = 0; k < 8; k++) {
      int x = i, y = j;          // ← 必须写在 k 循环里面!
      long long num = 0;
      for (int c = 0; c < n; c++) {
        num = num * 10 + (g[x][y] - '0');
        x = (x + dx[k] + n) % n;
        y = (y + dy[k] + n) % n;
      }
      ans = max(ans, num);
    }
巡视重点:只看两处——x=i,y=j 是否在 k 循环内;long long 有没有写。其余错误先不纠。
4.5 写法辨析
(3′)
「参考视频里把 int x=i, y=j; 写在了方向循环外面。看起来是漏枚举了,对吧? 但那段代码提交是 AC 的——我实测过全部 12 组数据,0 组失败。」
停顿,让"AC 了"和"看起来错了"这对矛盾在学生脑子里待 5 秒,再解释。
「原因不是巧合,而是一个可以讲清楚的道理:本题网格首尾相连,走一圈会回到原地, 所以平移是一一对应的——每个格子恰好被走到一次,既不重复也不漏。 方向 k 实际从 (i,j)+步数·方向向量 出发,无论 N 是几、走几步,绕完 8 个方向都覆盖全部 8N² 种组合,所以起点不重置也全对。
但它只在'网格首尾相连'时成立。换成普通(有墙)网格,起点会随方向漂移,大量组合被跳过而直接出错(我实测 3 万组随机数据有 22068 组不一致)。
所以工程上一律把起点写在方向循环内部。我们记住一条:结果正确不等于写法可迁移——你得说得出它在什么条件下才对。」
这是本课的信息社会责任落点。不要说"视频写错了"——视频在环形网格上的答案是对的,而且能证明; 要说"它只在环形时成立,普通网格必崩,所以我们写可迁移的版本"。这样既尊重原课例,又给了一个真实的工程判断案例。
4.6 提交
(2′)
学生现场提交 ENUM258B;教师在讲台投出实时通过人数。
「谁 WA 了,先看你是倒在第几个子任务:1~4 组 WA 基本是 N=1 或 N=2 的边界; 5~12 组 WA 大概率是 int 溢出。不要只看总判,要看分组。」
板书
数字盒子:枚举要素 = 起点(N²) × 方向(8) → 8N² 种,每种走 N−1 步 → O(8N³)
原语:num = num*10 + 位 | x = (x + dx + N) % N
两个坑:long long(10 位) | 起点变量必须在方向循环内
25 分钟全部压在这一题,是因为本课的算法思维要在具体题目里长出来,不是讲出来的。 4.2 的铺开推演是难点一的突破口(学生自己点出 9786,教师不代劳);4.5 的写法辨析看似"节外生枝", 实则是本课唯一能让学生记住一辈子的判断力训练,且直接对应四维目标中的信息社会责任。

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

环节目标掌握「循环模拟 + 判环」;突破"确定的路线不需要 BFS"这一常见误判。
教师活动 5.1 读题
(3′)
投影课件第 11 页题面;动画演示一个 2×2 网格的走法。
「每格写着一个箭头,你站在哪就往箭头方向走一格。问你最后停在哪, 如果永远停不下来就输出 -1。先想清楚一件事:路线是确定的吗?」

「是,每格只有一个方向。」

5.2 破误区
(4′)
易错预警 C:这道题不是最短路,不要写 BFS。 网格题做多了会形成条件反射,这里必须显式拦一次。
判断标准:BFS 用于「每步有多个选择,要找最优」;本题每步只有一个选择,直接模拟即可。
「那么怎么知道'永远停不下来'?」

「走回走过的地方……」

「对。走到一个来过的格子 = 进了环 = 永远出不去。拿个本子记一下到过哪就行——vis 数组。」
5.3 单步模拟
(4′)
课件第 12 页传送带模拟器:先用样例 1点「走一步」走完 4 步,让全班一起报坐标; 再切样例 2点「自动走」,走到 (1,1) 闭合那一刻按暂停(按钮会变成「暂停」)。
工具齐了再讲:走一步 / 后退一步 / 直接走到底 / 复位,速度分慢 / 中 / 快; 讲错一步可以直接「后退一步」,不必复位重来。
「看,它又回到 (1,1) 了。回到起点的这一刻,答案就已经定了:-1。 不需要真的跑一万步。」
再演示一次「正常停下」的样例:走到边界那一格,箭头把自己送出去——停在当前格,不是送出后的格子。 最后切样例 3(4×4,走 11 格停住)与样例 4(5×5,走 15 格后死循环): 这两组路径更长,右侧「路径记录」会逐格列出坐标,让全班顺着念一遍,把「模拟」彻底变成可见的动作。
易错预警 D:输出的是停止时你仍站在的那一格,不是"试图走到的那一格"。 这是本题第一高频 WA。
5.4 编码
(8′)
投影课件第 13 页;先写判断顺序的伪代码,再落代码。判断顺序是本环节的重点。
int x = 1, y = 1;
while (true) {
  if (vis[x][y]) { cout << -1; return 0; }   // ① 先判环
  vis[x][y] = true;

  int nx = x, ny = y;                      // ② 先算,不动
  char c = g[x][y];
  if (c == 'U') nx--; else if (c == 'D') nx++;
  else if (c == 'L') ny--; else ny++;

  if (nx < 1 || nx > h || ny < 1 || ny > w) { // ③ 再判出界
    cout << x << " " << y; return 0;            // 输出原地!
  }
  x = nx, y = ny;                          // ④ 确认安全才前进
}
「注意顺序:先算 nx/ny,判出界,安全了才真的赋给 x/y。 这样数组下标永远不会越界,vis 开 [505][505] 就够,不用开大一圈。」
巡视重点:只看判断顺序——有没有人先 vis[nx][ny] 后判出界(会 RE);有没有人输出 nx/ny(会 WA)。
5.5 提交
(6′)
提交 ENUM265C。本题给足 6 分钟,因为它比第一题更容易在边界上翻车。
「TLE 的同学:你一定没判环。样例 2 就是个环,不判环它会一直跑。 RE 的同学:检查你有没有先访问 vis[nx][ny] 再判出界。」
若时间紧张,此处改为「基础薄弱组先只做子任务 1(40 分),保证能拿停下类的数据」。
板书
传送带:路线确定 → 直接模拟,不用 BFS
顺序:① 判环(vis) → ② 算 nx/ny → ③ 判出界 → ④ 才前进
输出:停止时所在的格子 | 复杂度 O(HW) ≤ 25 万
与第一题的「枚举所有可能」形成对照:第一题是"很多条路,全试一遍取最优", 第二题是"只有一条路,跟着走到底"。两题并置,学生才能分清「什么时候用枚举、什么时候用模拟」。 5.5 留 6 分钟而非 2 分钟,是因为本题的边界错误更隐蔽,需要现场纠偏的时间。

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

环节目标暴露前概念,把四个易错点从"听过的提醒"变成"自己判断过的事"。
教师活动
投影课件第 14 页四条判断,先举手投票、报出比例,再逐条讲理。顺序不可颠倒——先讲理就没人暴露真实想法了。
#判断题结论讲理要点
1N=10 的数字盒子,答案最大是 9999999999,用 int 装得下。✗ 错int 上限约 21 亿,只有 10 位的一半。必须用 long long。
2环形取模时 (x + dx) % N 就够了,不用 +N。✗ 错C++ 负数取模仍为负,下标直接越界 RE。
3传送带每格只有一个方向,是确定的路线,可以用 BFS 求最短路。✗ 错BFS 用于"多选择找最优";本题无选择,只需模拟 + 判环。
4起点变量写在方向循环外面,只要提交 AC 了,写法就是对的。✗ 错本例在环形网格上确实恒对(可证),但普通(有墙)网格立刻漏组合出错。结果正确 ≠ 写法可迁移。
「第 4 条如果还有超过三分之一的同学举手说'对'——说明我环节④没讲透, 那我再补一句:我们写的代码要能迁移到下一道题,不是只赢这一道题。」
板书
结果正确 ≠ 写法可迁移(第 4 条单独圈红)
四条判断一一对应本课四个最易错的认知点(长整型 / 取模 / BFS 误用 / 环形恒对≠普通可迁移), 不是泛泛的"注意事项"。教师可以直接用举手比例判断哪个点没打透——这是本环节唯一的形成性评价数据。

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

环节目标形成知识结构;用 3 道题检验目标达成度。
教师活动
投影课件第 15 页知识树 SVG,从下往上点亮:枚举定义 → 四步法 → 两个原语 → 判环 → 四张脸。
「今天带走三句话:
一、枚举 = 列举所有可能 + 逐个判断;
二、写之前先算规模,8N³ 不到一万次,放心枚;
三、结果正确不等于写法正确。」
发当堂检测答题纸(3 题,5 分钟);收齐后不逐题讲,只报正确率,把错题留到课后答疑。
题检测内容参考答案
1N=6 的数字盒子,枚举要素共几种?每种走几步?总操作量级是多少? 起点 6² = 36 个,方向 8 个 → 288 种;每种走 5 步、访问 6 个格子; 总访问格数 288 × 6 = 1728(即 8N³),远低于 1 亿,可以放心枚举。
23×3 网格:第一行 RRD、第二行 LDU、第三行 UUL,从 (1,1) 出发,输出什么? -1。(1,1)R→(1,2)R→(1,3)D→(2,3)U→(1,3) 已在 vis 中 → 成环。
3什么情况下不该用 BFS 而该直接模拟?举一条判断标准。 每步只有一个确定选择(无分支、不找最优)时直接模拟;只在"每步多个选择且要最优"时才用 BFS。
板书
今日三句话(写在板书正中,不擦)
检测题刻意不出代码题:代码能力已在两个上机环节用 OJ 实测过,这里只查概念与判断力。 第 2 题是小型手推,能区分"看懂了"和"真会了"。

板八、板书设计

左区:知识主线(整节课保留,不擦)

枚举 = 列举所有可能 + 逐个判断

四步法:① 建模型 ② 砍空间 ③ 定顺序 ④ 会判断

两个原语:

  • num = num * 10 + 位
  • x = (x + dx + N) % N

真题一 数字盒子:起点 × 方向 = 8N² 种,O(8N³)

真题二 传送带:判环 → 算下一步 → 判出界 → 才前进

今日三句话(结课时写在正中)

右区:数字锚点 + 推演草图(可擦)

规模对照表

  • 1 秒 ≈ 1 亿次简单操作
  • 8N² ≤ 800 8N³ ≤ 8000
  • O(HW) ≤ 25 万

推演草图位(4×4 铺开图,环节④用)

易错四条(环节⑥投票后当场记下举手比例)

右区是"活板书":规模对照表与四步法并列, 学生抬头就能比对;推演草图与投票数据属于过程性内容,课后拍照留存、下课前擦掉。

业九、分层作业与评价要点

分层作业

层级任务完成标准
基础
必做
① 在椰程信奥上补做 ENUM258B、ENUM265C 至 AC;
② 手写一遍 4×4 样例的八方向推演过程(把 128 种走法中的 8 种起点 ×8 方向列成表)。
两题均 AC;推演表至少完成 1 个起点的 8 个方向。
提高
选做
① 把数字盒子改成求最小值,改动几行?(思考:要不要改 long long?)
② 把传送带改成输出一共走了几步,停下时输出步数、-1 时输出 -1。
能说清改动点,并在原数据上跑通。
拓展
挑战
① 数字盒子变式:每一步都可以换方向(N ≤ 8),求最大——提示:DFS 回溯,规模 8^N,需要剪枝;
② 枚举 + 前缀和:在 N×N 网格中枚举所有 2×2 子方格求和的最大值,把 O(N⁴) 降到 O(N²)。
① 能估出 8^N 的规模并说明为什么必须剪枝;
② 能写出降维前后的复杂度对比。

评价要点(课后逐条打勾,用于复盘)

目标维度观测点数据来源
信息意识环节②「四步法排序」正确率 ≥ 70%;环节④能自己答出 8N² 与 8N³。课件即时判分统计
计算思维ENUM258B、ENUM265C 通过率;错误集中在哪个子任务。椰程信奥后台分组判分
数字化学习与创新能否用课件枚举器/模拟器自主验证猜想;能否按子任务定位错误而非只看总判。巡视记录 + 学生提问质量
信息社会责任环节⑥第 4 条判断题的举手正确率 ≥ 70%。现场举手统计
整体达成当堂检测 3 题正确率:≥ 80% 为达成,60%~80% 需下节课前 5 分钟回炉,< 60% 则需重上环节④。检测答题纸

思十、教学反思(课后填写)

反思项预留记录位
时间实测
哪一环节超时/缩水
环节⑥四条投票比例
学生最高频的错误
下次要改的一件事

附十一、使用提示

一、时间不够时的砍法(按优先级)

可用时长砍法
90 分钟按本教案完整执行。
60 分钟环节③题型地图压到 3 分钟(只留四大类名称,不举例子);环节⑥改为课后在题单里作答; 两道真题各减 5 分钟讲解、各保 12 分钟上机。
45 分钟只讲环节①②④ + 现场提交第一题;环节⑤改为课后独立完成 + 下节课 5 分钟讲评。 不要砍环节④的 4.5 写法辨析——它是本课唯一的高阶认知点。
拆成 2×45′第一节:①②③④(含第一题提交);第二节:⑤⑥⑦(含第二题提交)。两节课开头各用 2 分钟回指板书四步法。

二、课堂节奏提醒

三、与配套材料的关系

材料用途
互动课件 HTML课上投影主线;页结构 = 本教案环节①~⑦一一对应。
说课稿 HTML用于考评/教研场景的口播稿,八说结构 + 答辩三问预案。
椰程信奥题目包 zip课前导入 OJ;题号 ENUM258B(12 组数据)、ENUM265C(13 组数据)。
原题与答案.md教师备课用,含两题完整题面、AC 代码、易错点表与测试数据设计说明。

教案依据 B站课例 BV1NWnczEE9Z《CSP复赛专题2-枚举》还原编写 · 配套互动课件与说课稿 · 2026 国庆集训