Appearance
408 真题解析 + OJ 化 AI 提示词
使用方法:把下方代码块整段复制给 AI,开头的
{YEAR}和{NUM}替换成具体年份和题号。
text
# 任务
请帮我把 408 数据结构真题的第 {YEAR} 年 第 {NUM} 题,同时产出两份产物:
A) 可视化解析 md:exam-408/q/ds/{YEAR}/{NUM}.md(如已存在则只补完解析部分)
B) OJ 题目目录:oj-problems/ds-{YEAR}-{NUM}-{英文-slug}/(完整 13 节规范)
# 必读参考(开工前先读,不要凭记忆)
1. exam-408/q/ds/2009/42.md ← 解析部分的黄金样板,结构/语气/深度对齐它
2. oj-problems/AUTHORING-408.md ← OJ 化的完整规范,按它的 Checklist 做事
3. oj-problems/ds-2009-42-find-kth-from-tail/ ← OJ 目录的完整样板
4. exam-408/q/ds/{YEAR}/{NUM}.md ← 本题真题原文(frontmatter 里的 stem / answer 是关键输入)
如果第 4 个文件不存在或 stem 字段为空,先停下来告诉我,不要瞎编题面。
如果这题实际无法 OJ 化(纯概念题、要求证明、要求画图、答案不唯一),也先告诉我,只做 A 不做 B。
# 受众与风格(非常重要)
读者是 **准备 408 考研的学生**,不是竞赛选手,也不是工程师。写作时:
- 先让学生「看懂」,再让学生「记住」,最后让学生「会写」。
- 每一个关键跳跃(为什么用双指针?为什么 p 先走 k 步?)都要把「为什么」讲透,不要只说「这样做」。
- 对比朴素解法(如两次遍历)是强制动作——让学生看见优化前后的差距,他才会记住。
- 能用一张图/一个比喻说清楚的,就别堆公式。核心原理单独一行,加粗或引用块突出,方便我录视频时念成金句。
- 不要用 KaTeX / $...$,OJ 题面渲染器不支持;时间复杂度直接写 O(n)。
# A. 解析 md 的结构要求(严格对齐 2009/42.md)
frontmatter 字段:sidebar/aside/prev/next/id/subject/year/number/type/score/stemInBody/answer/summary/title/description/keywords/stem/topics/vizLink/blogLink
- id 格式:ds-{YEAR}-{NUM}
- title/description/keywords 自然嵌入「{YEAR}年 408 数据结构 第{NUM}题」等长尾词(我要 SEO)
- answer 一句话:算法名 + 关键动作 + 复杂度
- summary 一句话:面向学生的「这题到底在考什么」
- vizLink 先占位 /ds-visual/algo/{topic}/{slug}?embed=1,我后续手动改
- blogLink 先占位 /posts/linear/{topic},我后续手动改
正文结构(## 二级标题):
1. 题目:完整复述题干 + 节点结构图(用 ASCII 框,不用图片)+ (1)(2)(3) 小问
2. 解析 → ### (1) 算法设计思想
- 点名算法(双指针/滑动窗口/原地反转……)
- 给出「核心原理」单独一段,加粗,可直接念成视频金句
- 讲清楚「为什么不是朴素解法」
3. 解析 → ### (2) 详细实现步骤
- 用有序列表,每步一行动作 + 一行说明
- 显式写明边界条件的处理时机(哪一步该返回失败)
4. 解析 → ### (3) 代码实现(C 语言)
- 严格按 408 考研答题风格:typedef 结构、关键行中文注释、函数头 doxygen 风格三行注释
- 变量名用 p/q/pre/cur 这种考研答卷常见命名,不要用 currentPointer 这种工程化名字
5. 复杂度分析:表格(时间 / 空间 / 简要说明)+ 一行 blockquote 点出「比朴素解法强在哪」
# B. OJ 题目的硬性要求(对齐 AUTHORING-408.md)
- 目录名 / meta.yml slug / source 三处一致:ds-{YEAR}-{NUM}-{slug} ; source: 408/ds-{YEAR}-{NUM}
- 三语言齐全:c / cpp / java 的 wrapper / starter / solutions 各一份,缺一不可
- wrapper 恰好一处 {{SOLUTION}} 占位
- 输入输出「越简单越好、越单一越好」:真题里「返回 1/0 并打印值」一律改写成「成功返回值,失败返回 -1」
- 带头结点的真题:OJ 输入只给数据结点,题面里明确写「链表各数据结点的值」
- 测试用例 5–8 组:示例 × 2 + 最小规模 × 1 + 中等规模 × 1 + 边界 × 1~2 + 迷惑样例 × 1;不做大规模/性能压测
- 所有文件 UTF-8 **无 BOM**
- index.md 里**不要**写算法思路(思路放在 A 里),只给题面 / 输入 / 输出 / 示例
- starter 只给 Solution 骨架,不给 main、不给 IO、不给数据结构定义
- 三语言输出格式必须完全一致
# 自测(不做完不算完成)
在报告完成之前,必须:
1. 把每份 solutions/{lang} 代入对应 wrapper 的 {{SOLUTION}},本地编译运行
2. 对 tests 下每个 .in 逐个执行,diff 实际输出和 .out
3. 三语言 × 全部用例 全部 AC 之后,再告诉我「完成」
4. 如果某个用例规模会让参考解 TLE,先砍规模或优化参考解,不要交上来就说「大概能过」
# 交付
做完列一个清单:
- [ ] A 写了哪个文件
- [ ] B 建了哪些文件(逐条列目录树)
- [ ] 自测结果:C/C++/Java × N 个用例,全部 AC
- [ ] 任何我需要手动改的占位(vizLink / blogLink / slug 拼写确认等)