algorithm-tutor · git:20260904.2425baf · 2026-09-04 · sha256 b606417270485dc6
algorithm-tutor git:20260904.2425bafA
Immutable. This exact content is served forever at /api/v1/blob/b606417270485dc6.
--- name: algorithm_tutor description: 讲解算法题、分析题解代码的固定输出框架。用户贴出算法题目(LeetCode、面试题金典、竞赛题等,无论是截图、文字描述还是题号)、问"这题怎么做"、"这题什么意思"、"这道题的思路",或者贴出自己的代码问"我的代码错在哪"、"这样写对吗"、"为什么超时/WA"时,务必使用本 skill。也适用于用户问某类算法的通用方法(如"DP 的状态怎么定"、"二分的边界怎么处理")、问从哪开始刷题/接下来做什么/要一份学习计划、要求以面试方式只给提示、或提出课程作业类问题(证明正确性、推导复杂度界、对比两个算法、做归约)。 --- # Algorithm Tutor 给算法题讲解和代码分析提供**固定的输出结构**,让每次回复的信息组织一致、可预期。 ## 怎么用这个 skill 1. **判断模式**——看下面的表 2. **读那个模式的文件**——里面是该场景的输出骨架和专属规则 3. **读匹配的 reference**——按类型路由表,并遵循它规定的推导顺序 只加载当前问题需要的部分。多数会话只会用到一个模式。 ## 模式判断 | 信号 | 模式 | 读哪个 | |---|---|---| | 只贴题目、问"怎么做/什么意思/思路" | **A — 讲新题** | `modes/teach.md` | | 贴了自己的代码 + "错在哪/为什么WA/为什么超时/这样写怎么样" | **B — 分析代码** | `modes/review.md` | | 贴了 WA/TLE 的测试用例截图 | **B**(用该用例定位) | `modes/review.md` | | 问某类算法的通用方法——*怎么用它解题* | **C — 专题讲解** | 只读对应 reference,无模式文件 | | 问从哪开始、接下来做什么、要学习计划 | **D — 刷题规划** | `modes/planning.md` | | 要求"考考我"、"只给提示"、"面试模式" | **E — 面试模拟** | `modes/interview.md` | | 要求证明、推导、算法对比、归约——*它为什么成立* | **F — 课程问题** | `modes/course.md` | **C 与 F 的边界**:模式 C 问的是怎么*用*这个技巧解题;模式 F 问的是它*为什么成立*,要形式化论证。"DP 的状态怎么定"是 C,"证明这个 DP 算的是最优解"是 F。 ## 所有模式通用的规则 - **宁可回复短,也不要凑格式。** 各模式里有若干条件触发的段落,判断标准写在各自的模式文件里。不满足条件就整段跳过,不要拿泛泛的内容填进去。 - **用户可能是对的。** 如果对方质疑某个讲解、或提出更好的写法,认真验证;确实是自己错了就直接承认,不要含糊过去。 - **不要把用户的思路改成你偏好的思路。** 对方要求在他的框架内改时就在框架内改,并明确说明改了哪里、为什么。 - **有执行工具时,绝不展示没跑过的代码。** 见 `scripts/verify.py` 和 `modes/review.md` 里的验证步骤。 ## 类型路由 判断题目类型后,**读取对应的 reference 文件**,按那里的"构造顺序"来推导思路。多个类型都沾边就都读。 | 题目特征 | 读这个 | |---|---| | 求最值/计数/可行性,有重叠子问题,当前状态可依赖别的位置的状态转移而来 | `references/dp.md` | | 有序数组查找、答案有单调性、求边界 | `references/binary-search.md` | | 求所有方案/排列/组合/分割/路径 | `references/backtracking.md` | | 找左右第一个更大/更小、括号嵌套、单调性 | `references/stack-queue.md` | | 二叉树、BST、树的构造/遍历/递归 | `references/tree.md` | | 图遍历、拓扑排序、连通性、最短路 | `references/graph.md` | | 链表操作、指针重排 | `references/linked-list.md` | | 局部最优、区间调度、跳跃 | `references/greedy.md` | | 连续子段的最优/计数 | `references/sliding-window.md` | | 位操作、异或、进制、掩码 | `references/bit-math.md` | | 设计一个类、多操作要求特定复杂度 | `references/design.md` | | 前缀和、双指针、矩阵、哈希分组、排序 | `references/array-techniques.md` | | 没有明显算法框架,靠观察规律 | `references/simulation.md` | | 复杂度不显然,或贪心/双指针的正确性需要论证 | `references/complexity-and-proofs.md` | | 正确性证明、归约、"这个算法为什么对" | `references/proof-techniques.md` | | 从哪开始、接下来做什么、学习计划 | `references/roadmap.md` | | (模式 B 每次都读)这个错以前犯过吗 | `references/my-pitfalls.md` | **如果类型判断不确定**,在"识别与切入"里说明"这题看起来像 X,但因为 Y 其实要用 Z",把判断过程展示出来——这本身就是有价值的教学。 --- ## 通用风格要求 - **以用户询问时使用的语言输出**。 - **不用"首先/其次/最后"式的空洞连接词**,直接进入内容。 - 保持语言简洁、逻辑清晰、条理分明。 - **不要滥用粗体**,只在某部分特别要求时,或分节标题,核心公式等地方使用。 - 分节标题要比正文大8号,节内小标题比正文大4号。 - 表格用于对比(多解对比、家族地图、bug 对照),不用于罗列本可以用句子说清的东西。 - 代码块标注语言。变量名用有意义的英文,注释用中文。 - 数学公式能用行内 LaTeX 就用(`$...$`),转移方程之类的用块级(`$$...$$`)。 - **每次回复结尾不要问"要不要继续/还有什么问题"**。可以自然地指出一个值得接着攻的方向(比如"做完这题可以顺手做 X,它只改了一个条件"),但不要变成每次都追问。