1
0

AGENTS.md 11 KB

AGENTS.md

项目目标

本仓库用于为一名处于“提高+ / 省选-”阶段的中国信息学竞赛学生生成可独立学习的课程资料。目标不是罗列知识点,而是让读者在没有原课程的情况下,也能经历接近课堂的引导、推导、例题分析、编码与复盘过程。

主题.md 是课程范围的动态来源。它可能随时增加或调整主题;开始任何课程生成、课程索引更新或习题整理任务前,都必须重新读取它,不能依赖之前记忆的主题列表。

默认语言与读者水平

  • 正文使用简体中文,术语首次出现时给出常见英文名,方便检索英文资料。
  • 默认读者已掌握 C++ 基础、常见 STL、基础复杂度分析、基础图论与基础动态规划,但仍应在正文开头明确列出本节真正依赖的前置知识。
  • 难度定位高于普及组常规内容,面向提高组高阶到省选入门;避免用大量模板题堆砌篇幅。
  • 数学公式使用 LaTeX。多行展示公式必须用独占行的 $$ 作为起止定界符,禁止使用当前查看器无法正确渲染的方括号式展示定界符。
  • 正文算法核心使用类 Python 伪代码,突出状态、转移、不变量和数据流,不让 C++ 容器与工程细节淹没推导。完整代码默认使用可提交的 GNU C++17,并作为独立附件保存。

内容组织

  • 一个大主题应拆成若干边界清晰、可以独立学习的子主题 Markdown 文档,不要把整类算法塞进一个超长文件。
  • 课程文档统一放入 课程/。目录与文件名前加两位数字编号,顺序尽量遵循依赖关系;新增主题时不要无故重排已有编号或破坏现有链接。
  • 课程/README.md 作为总索引,记录主题、子主题、前置依赖、建议顺序和完成状态。只有实际完成并通过质量检查的文档才能标为完成。
  • 同一主题内部应从概念和不变量逐步走到模型辨认、算法推导、实现、变式与综合题。若某个主题跨度很大,先写概览,再拆出独立小节。
  • 不改写或删除用户在 主题.md 中的内容,除非用户明确要求。

每篇课程文档的最低结构

标题可以按内容微调,但每篇应覆盖以下信息:

  1. 本节目标:学完后能够判断、证明、实现什么。
  2. 前置知识与课前自测:给出少量能暴露知识缺口的问题;答案放在后文或折叠区,避免立即泄露。
  3. 问题动机:从一个具体问题或反例出发,说明朴素做法为什么不够。
  4. 步步式引导:用一连串短问题推进;先让读者观察,再引入定义、性质和算法。关键结论不能凭空给出。
  5. 核心知识:准确定义、关键不变量、推导或证明、正确性说明、时间与空间复杂度。
  6. 实现指南:数据结构选择、类 Python 核心伪代码、边界处理、常见错误和调试办法。伪代码必须说明状态与变量含义、适用条件和失效边界;完整 C++17 不在正文中大段铺开。
  7. 扩展与联系:至少包含有价值的变式、与相邻知识点的联系,或算法失效的边界;不要为了“扩展”堆冷知识。
  8. 精选例题:按下述统一格式编写。
  9. 总结与自检:用可回答的问题检查是否真正理解,而不只是背下模板。
  10. 课后训练建议:给出做题顺序、卡题多久看哪一级 Hint、做完后的复盘点。

步步式引导要求

  • 采用“问题 -> 尝试 -> 反例/瓶颈 -> 新观察 -> 形式化结论 -> 实现”的节奏。
  • 重要算法至少展示一次从朴素方案到目标复杂度的自然演化。
  • 每引入一个关键技巧,都回答三个问题:它解决了什么瓶颈、为什么正确、在什么条件下不能用。
  • 对容易混淆的概念提供最小反例或对照案例。例如定义相似但适用条件不同的算法,应明确区分。
  • 不要让引导问题变成只有“是/否”的装饰;问题应能促使读者写出状态、画图、构造反例或估算复杂度。
  • 对关键推导设置停顿提示,让读者先独立思考,再展开答案。

精选例题规范

例题平台按以下优先级选择:VJudge 最优先,其次考虑 Codeforces、AtCoder、黑暗爆炸。应先检索并优先给出可稳定访问、题面与数据范围可核验的 VJudge 条目;若 VJudge 聚合页信息不足,再同时给出原题页用于补全和核验。不要为了满足平台偏好而选择质量较差或重复度高的题。

每道正式例题必须包含:

  • 来源信息:平台、题号、题名、可点击链接,以及大致难度和主要考点。
  • 题目描述:用中文自包含地转述题意,不要大段复制受版权保护的原题面;保留会影响建模的条件。
  • 输入输出与数据范围:只写经过来源核验的信息;不确定时明确标注待核验,禁止猜测或编造。
  • 样例解释:当样例对理解模型有帮助时给出,而不是机械抄录。
  • 分级 Hint:通常设置 3--5 级,从模型识别、关键性质、算法框架到实现提醒逐层接近答案。相邻两级不能只是换一种说法。
  • Observations:按考虑顺序列出数据范围给出的信号、被排除的复杂度、自然但失败的尝试及最小反例、真正改变对象/状态/复杂度的观察。每条观察都要说明它删掉了什么搜索、状态或转移,不能只罗列结论。
  • Editorial:详细还原“约束分析 -> 朴素方案 -> 瓶颈 -> 关键转化 -> 形式化模型 -> 目标算法”的考虑链;再分别证明每一步合法、为何不漏解或重复、最优化下界如何达到、终止时为何得到答案,并把复杂度代回本题范围。不能只说“套某模板”。
  • 实现细节:下标、初始化、图的方向、重复边、自环、溢出、递归深度、常数、特殊数据等与本题有关的事项。
  • 核心伪代码与参考实现附件:正文只放类 Python 核心伪代码。GNU C++17 完整代码统一保存到仓库根目录 参考实现/<主题>/OJ-题号.cpp,正文提供相对链接。附件需与正文算法一致、可独立编译;可以核验时应使用样例或小规模对拍验证。
  • 复盘与变式:指出本题的识别信号、可迁移技巧,并给出至少一个改变条件后的思考题。

提示与题解应使用 HTML details 折叠区或清楚的分隔,确保读者能逐级查看而不会一眼看到完整答案。

选题原则

  • 每个子主题通常安排 2--4 道核心例题:至少一题用于建立模型,一题需要组合技巧或非直接模板化观察;必要时再加入一题实现或证明导向题。
  • 控制同质题数量。若两题的唯一差别只是换皮或参数,应保留更有代表性的一题。
  • 题目应与当前讲义中已经建立的工具匹配;如必须使用尚未学习的算法,明确标为“选学”并给出依赖跳转。
  • 难度形成梯度,但不能用一道明显过难的题代替必要的中间台阶。
  • 历年真题主题应按知识依赖和思维价值组织,不只按年份堆列表;涉及多个算法时链接回对应子主题。

高阶扩展选题与深度

  • “每个课程”的高阶扩展默认按 主题.md 中的算法大主题计算,不按每篇子文档机械乘题量;历年真题仍保持中国竞赛真题体系。
  • 每个算法大主题通常精选 3 道 Codeforces 2400--2700 或思维强度相当的 AtCoder Grand Contest 题。只有核心转化彼此独立、确有新增学习价值时才增加到 4 道。
  • 转化巧妙优先于评分和模板复杂度。优先选择需要改变研究对象、反向建模、补图/对偶、隐式图、参数化、状态压缩、势能或代数化表达的题。
  • 不用“高级模板 + 常规套用”凑深度。若去掉算法名后只剩普通分层图、直接 CRT、常规矩阵 Lazy 或同一模板换参数,应降为练习或删除,不占高阶扩展名额。
  • 控制套路密度。同一主题的高阶题必须承担不同思维任务;两题若关键考虑链相同,只保留转化更典型、来源更稳定的一题。
  • 可以偶尔加入一题 2800+ 的构造、交互或弱相关灵活性题,但要明确标为“灵活性实验室”、不作为后续硬前置。交互题需提供最小本地模拟器,并明确本地验证不等价于在线通过。
  • 高阶例题即使读者不独立提交,也应提供充分的“不做题收获”:读者仅阅读题面转述、Observations、Editorial、证明和伪代码,也能复述识别信号、核心转化与失效条件。

外部资料核验

  • 整理例题前应联网核对题号、题名、链接、输入输出、数据范围和特殊限制。技术说明优先使用原题、官方题解或主办方资料;VJudge 可作为统一入口,但不能用聚合页猜测缺失信息。
  • 链接失效或平台当前不可访问时,如实记录核验状态并寻找原始来源或可靠镜像,不能伪造内容。
  • 区分原题事实、官方结论和本文推导;若采用非官方解法,应自行检查正确性。

代码与正确性质量门槛

  • 所有参考代码至少应通过本地 g++ -std=c++17 -Wall -Wextra 编译。
  • 有样例时运行样例;适合暴力校验的算法,优先增加小规模随机对拍。若因外部条件无法执行,要在交付说明中明确未验证项。
  • 复杂度必须结合题目数据范围说明是否可行,不能只孤立地写一个大 O。
  • 正确性证明至少覆盖:算法维护的状态/不变量、每一步为何合法、为何不会漏解或重复计数、终止时为何得到目标答案。
  • 文档中的公式、伪代码、参考实现三者必须使用同一套定义与下标约定。
  • 课程正文不得内嵌带 main 的完整 C++ 程序;完整程序必须通过附件链接提供。自动检查应拒绝旧展示公式定界符、缺失附件或正文内嵌完整程序。
  • 禁止编造题目、来源、数据范围、评测结果或“已通过”状态。

执行流程

  1. 每次先读取最新的 主题.md、课程/README.md(若存在)和目标章节已有内容。
  2. 明确本次覆盖的子主题、前置知识与预期难度;范围较大时先列可执行计划。
  3. 核验候选题来源,去掉重复、失效或依赖超纲的题。
  4. 先完成知识推导,再写例题 Hint、Observations 与 Editorial;确认考虑链能从题面约束自然导向算法后,再写核心伪代码、实现附件和复盘。
  5. 编译并尽可能运行所有新增附件;检查正文到附件的相对链接、内部链接、题目链接、术语、公式定界符、复杂度和数据范围。
  6. 更新总索引和完成状态,并在交付时列出已验证与尚未验证的部分。

写作禁忌

  • 不写只有定义、板子和题单的“速查表式课程”,除非用户明确要求速查表。
  • 不把完整题解提前泄露在第一级 Hint 中。
  • 不用“显然”“容易发现”“不难证明”跳过关键推理。
  • 不虚构课堂互动、学生反馈、题目数据或在线评测结果。
  • 不为了显得高级而加入与学习目标无关的艰深内容。
  • 不在未检查全文依赖时批量重命名文件或调整编号。

完成标准

一篇文档只有在以下条件同时满足时才视为完成:结构完整;推导可独立理解;例题信息已核验;Hint 确实分层;Editorial、正确性与复杂度齐全;参考实现已经过可执行的编译/测试;索引已同步。否则在索引中标记为草稿或待核验。