Install
openclaw skills install @fslong520/xitiopenclaw skills install @fslong520/xiti析题、启发式题解、解题报告、题目分析、代码精讲、逐行讲解
为竞赛题目生成启发式题解,核心是「教人思考」而非「给答案」。
| 输入 | 方法 |
|---|---|
| URL | urlgo snapshot(不可用时 WebFetch) |
| 文件 | Read |
| 对话文本 | 直接使用 |
| 标程文件 | Read,融入精讲 |
看分值 + 数据范围(数值为参考,非铁律):
| 深度 | 参考分值 | 写法 |
|---|---|---|
| 浅 | ≤ 250 | 一两段说清思路,代码关键行加注。无须逐步推演,无须错误表 |
| 中 | 250~450 | 展示核心思维过程,公式用 LaTeX + 数值例,附 2~3 条常见错误 |
| 深 | ≥ 450 | 暴力 → 撞墙 → 优化 → 数据结构选型,充分展开,代码逐段精讲 |
若分值跨越边界,或数据范围异常大/小,AI 自行判断深度,宁浅勿深。
Human-in-the-Loop:定完深浅后问用户——"本题我判断为 X 难度,您希望浅写还是深写?有没有特定标程要我精讲?"
排列组合自由,但必须覆盖以下六点:
六点可自由组合。可先贴代码再解释,也可边推演边贴片段。因题制宜。
推荐布局(今日实战沉淀,成熟好用)——按以下小节组织,尤其适合同中难题:
text ## X - 标题 题解 ### 题目一句话 —— 一行说清题意 ### 怎么想 —— 思维过程:朴素→卡点→关键观察(见 4d 规律发现路径) ### 关键点 —— 核心洞察,一句话点透 ### 逻辑链 —— Mermaid 居中图(flowchart,见图表规范) ### 复杂度 —— 时间 + 空间 ### 参考代码 —— 见「用户代码处理」,附点评 (### 易错点) —— 中难题必配:UB/边界隐患 + 修正写法该布局是参考框架而非模板——简单题可合并"怎么想/关键点",深难题可拆"怎么想"为多步。核心不变:读者能跟着你的思维走一遍。
若是比赛多题,题与题独立成节,默认合一文件(如 abc471_题解_A-E.typ → PDF),末尾加串讲总结;不散成多个文件,除非用户要求。
产物判定(哥哥 2026-08-23 严令)——判据是「要不要动图」,不是题数:
| 场景 | 产物 | 理由 |
|---|---|---|
| 单题且算法过程要动态可视化(动图) | HTML 单文件(anime.js/cytoscape 动画) | 网页上传,逐帧可播 |
| 多题(一律 typst,不管有无动图需求) | typst → PDF(学术风,静态组图) | 微信群/打印,动图无意义 |
| 单题、但哥哥强调用 typst / 单题无动图需求 | typst → PDF(学术风) | 尊重明确指定 |
#snapshots 状态组图 / #booktabs 三线表 / Mermaid 式流程图),见 templates/example-multi.typtemplates/theme-academic.typ(A4 学术风),编译命令 typst compile <xxx>.typ <xxx>.pdf详见 steps/02-write.md。
以下三点是析题区别于普通题解的关键:
不要只扔一行 LaTeX 就跑。数学符号对部分读者是黑话,必须配一个具体数值例子。
不好:concat(x,y) ≡ x + y (mod M)
好: concat(2,1)=21, 21÷2=10余1, 2+1=3÷2=1余1 → 余数相同 ✓
实操规则:每个公式后面紧跟一个「举个例」。例子用小数字,读者能心算。
遇到需要「关键转折」的题,先写为什么第一反应是错的,再写正确的路。
不好:观察到 BFS 距离奇偶性即可
好: 第一反应 BFS 距离偶→#、奇→.,但全黑格全部输出 #
手动追两步发现全黑格 step1 全白后就再也回不来了
所以需要另一个视角——距离最近白格的距离——补齐盲区
读者需要知道为什么简单的解法不够,才能理解复杂解法的必要性。
当问题从某个角度难以直接求解时,主动反问:
反过来呢?从对立面出发呢?
典型案例(今日 ABC460 D):
# 的距离 → 对 . 格子有效. 的距离 → 对 # 格子有效在题解中标注这种「换视角」的时刻,帮助读者建立思维灵活性。
用户最想看的不是结论,是规律怎么被发现的。标准路径三步,题解里照此展开:
-11 -4 -1 2 的取曲奇过程,发现"已取集合在排序序列里始终是一段连续区间"。写"怎么想"时务必包含这条路径,不要直接甩性质。读者要知道性质是从哪一步冒出来的。
写题解必走来龙去脉的因果链:发现了什么 → 因为什么 → 所以用什么算法 → 怎么写的代码。四环缺一不可,不许只堆结论。
发现:手推样例时注意到 X 现象(如:窗口滑出一天后,剩余和只差一个数)
因为:最近 M 天窗口每次只动一格,重复求和的都是同一批数(现象背后的原因)
所以:用滑动窗口——维护窗口和,滑出减、滑进加,O(N) 一趟(原因推出算法)
代码:于是 s += a[i] - a[i-m]*f[i-m] 一行同时完成滑出与尝试加今天(算法落到代码)
叙事模板(怎么写):
禁止:"观察到 XXX,用 YYY 即可"(跳过了因为和所以);"显然/易知"(把因果链藏起来)。因果链是题解的灵魂——读者要能复现你的思维过程,而非背诵你的结论。与 4d 规律发现路径配套:4d 讲规律怎么发现,4e 讲因果怎么贯通。
面向竞赛学生的题解,代码须遵循以下风格。若用户未明确要求风格,默认使用此规范。
n, m, k, ans, mx, mn, rt, p, l, rrt(不用 root,不用 r——易与"右"混淆)cnt,临时变量用 tk 遍历前序,函数只传中序范围 (l, r)int a[N], b[N]; // a: 前序, b: 中序, 全局
int k; // 前序光标
void dfs(int l, int r)
{
if (l > r) return;
int rt = a[k++];
int p = l;
while (b[p] != rt) p++;
dfs(l, p - 1);
dfs(p + 1, r);
cout << rt << ' ';
}
bits/stdc++.h,用具体头文件vector, stack, queue),优先全局数组模拟string 就不用 char[]// 左子树:中序[l, p-1]// 循环、// 赋值)仅在用户主动说「留空」「挖空」「填空」或类似要求时启用。 默认不挖空。
思路:代码中挖去 3~5 个关键处(______),答案藏在前文文字描述中,学生细读可寻。
挖空原则:
if (______) return;(递归出口条件)rt = _______;(如何取根)b[p] != ____(比较对象)int、const、cin >> 这类固定写法深浅调整:
用户提供自己的代码(如 a.cpp~e.cpp)时:
#include/#define/using 等)从略但须注明"完整文件见 xxx,模板头从略";代码块与其源文件逐字一致,不得改写、不得"优化"掉他的写法(除非在点评中指出)。产物判定(2026-08-23 哥哥严令):判据是「要不要动图 + 哥哥是否指定」,先判再动手。
| 场景 | 产物 | 模板 | 验证 |
|---|---|---|---|
| 单题 + 需要动态动画 + 哥哥未指定 typst | HTML 单文件 | templates/example.html | urlgo 开页验证 |
| 多题(一律 typst) | typst → PDF | templates/example-multi.typ + theme-academic.typ | typst compile 出 PDF |
| 单题、哥哥强调 typst / 单题无动图需求 | typst → PDF | templates/example-multi.typ + theme-academic.typ | typst compile 出 PDF |
多题题解(typst 版)要点:
<比赛>_题解_A-X.typ(同目录放 theme-academic.typ 或 import 相对路径),编译 typst compile <文件> 题解.pdftemplates/example-full.typ(ABC472 七题完整成品,含全部要素)——直接抄结构#problem-statement(题面+题目一句话)→ 剧情插画 → 怎么想(因果链)→ 关键点(#key-point)→ SVG 多帧图(展示状态变化)→ 样例演示(#booktabs)→ 复杂度 → 参考代码(codly)→ 点评(#review)→ 易错点(#warn)templates/gen_figs.py(改数据即可),图存 templates/figs/templates/illu/ 有样例),风格教材配图+彩色点缀,#align(center, image("xxx.png", width: 55%))#show: code-init),数学用 $...$(typst 原生,<= 勿写 leq)typst compile 验证 PDF 生成、页数合理、无 error(warning 可忽略)typst 语法坑(踩坑沉淀):
font-family 只写 "Noto Serif CJK SC"——写 "Libertinus Serif, serif" 会让中文回退成隶书(STLiti);SVG 内文字禁斜体(中文无斜体变体,回退隶书)[...](如 [$|S-2P_k|$]),写字符串 "$...$" 不渲染公式$...$ 内禁中文($sum 分子$ 报错);代码变量名(dp、par、cross、lca 等)用反引号 `dp` 而非数学;连写变量 $O(NM)$ 报错须 $O(N M)$#strong[...] 在 #booktabs(...) 等函数调用内要去掉 #(代码模式)写成 strong[...]# 在正文要转义 \##captionless[...](theme 已定义,小字灰禁斜体防隶书)单题 + 动图(HTML 版)要点(HTML 仅限此场景:单题 + 需动图 + 哥哥未指定 typst):
<比赛/题目>_题解.htmltemplates/example.html 骨架——内含全部基础 CSS 与脚本.xt-statement)②思路讲解 ③复杂度 ④参考代码+点评 ⑤样例演示(表格逐步验证)<pre class="xt-code"><code class="language-cpp">,highlight.js CDN 高亮,带行号(模板 JS 自动拆分 .xt-ln,CSS counter 编号,复制不带行号)$ 行内,$$ 行间,auto-render 渲染)<pre class="mermaid"> 顶格书写,mermaid.js CDN 渲染,见下方规范)HTML 产物中,中等难度(≥250 分)及以上的题,思路讲解必须配动态可视化动画——把算法过程用步进动画演给学生看(多题 typst 产物不配动画,用静态组图):
https://cdn.jsdelivr.net/npm/animejs@3.2.2/lib/anime.min.js(defer 引入,模板已含).xt-viz 区块(模板已含样式),内部结构:动画主体(如 .xt-viz-array 格子阵列)+ 控制条 + 解说行 .xt-viz-msga[0]=2 + a[4]=15 = 17 > 11 → r--),与动画同步| 算法 | 可视化形式 | 参考实现 |
|---|---|---|
| 数组遍历/最值 | 格子扫描高亮 | 仿 B 题改 steps |
| 双指针/二分 | 左右指针移动、命中高亮 | B 题(模板已实现,直接改数据) |
| 排序 | 元素交换/冒泡上浮 | 仿 B 题改 steps |
| BFS/DFS | 节点访问顺序着色 + 队列/栈 | 格子或节点阵列 |
| DP | 表格逐格填充高亮 | 二维格子阵列 |
| 贪心/构造 | 状态逐步变化 | 仿 B 题 |
产物为单文件 HTML,以 iframe 形式嵌入讲义平台(智国学堂 / 01oj 均如此),故必须满足:
<style>,全部内容内联于正文;不得引用本地相对路径资源(iframe 内相对路径失效)xt- 前缀(如 xt-wrap、xt-sec、xt-code),避免与宿主平台 CSS 冲突https://cdn.jsdelivr.net/npm/katex@0.16.21/dist/katex.min.css + katex.min.js + contrib/auto-render.min.jshttps://cdn.jsdelivr.net/npm/highlight.js@11/styles/github-dark.min.css + https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.11.1/build/highlight.min.jshttps://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.jshttps://cdn.jsdelivr.net/npm/animejs@3.2.2/lib/anime.min.jsdefer,初始化逻辑在 DOMContentLoaded 内(模板已写就,直接复制)<pre> 内仍可读;代码无高亮仍可读;公式 throwOnError: false 不崩页.xt-wrap max-width 860px 居中,代码块 overflow-x: autoignoredTags 必须含 code/pre,防 C++ 代码中 $ 被误渲染<pre class="mermaid"> 内第一列即写 flowchart,勿缩进——缩进会污染节点文字;居中由 CSS(.mermaid { text-align:center })保证组装流程:复制 templates/example.html → 替换题头/小节/代码/图表/公式 → 校对各节 → 本地验证(见上)。
禁用手打 ASCII 画图——所有流程图、结构图、步骤图一律用 Mermaid 或内嵌 SVG。
必须使用 Mermaid 的场景:
| 场景 | 图表类型 | 示例 |
|---|---|---|
| 算法主流程 | flowchart TD | 从输入到输出的完整流程 |
| 构造/转换过程 | flowchart LR | A → B → C → D 的步骤链 |
| 思维分支/决策 | flowchart TD | 条件判断、路径选择 |
| 样例验证 | table | 逐行验证(不用 flowchart,太冗长) |
禁止使用的图表:
Mermaid 写法要点(HTML 产物,注意非 md):
<pre class="mermaid">
flowchart LR
A["步骤1: 描述"] --> B["步骤2: 描述"]
B --> C{"判断条件"}
C -->|是| D["结果1"]
C -->|否| E["结果2"]
style A fill:#e3f2fd
style D fill:#c8e6c9
style E fill:#ffcdd2
</pre>
.mermaid { text-align:center }),无需手动包裹 div<pre class="mermaid"> 内源码必须顶格书写,第一列即写 flowchart,无缩进(缩进会污染节点文字)<br/> 换行style 给关键节点着色(起点蓝、终点绿、判断橙、错误红)