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 难度,您希望浅写还是深写?有没有特定标程要我精讲?"
排列组合自由,但必须覆盖以下六点:
六点可自由组合。可先贴代码再解释,也可边推演边贴片段。因题制宜。
若是比赛多题,题与题独立成节,末尾加串讲总结。
详见 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):
# 的距离 → 对 . 格子有效. 的距离 → 对 # 格子有效在题解中标注这种「换视角」的时刻,帮助读者建立思维灵活性。
面向竞赛学生的题解,代码须遵循以下风格。若用户未明确要求风格,默认使用此规范。
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 >> 这类固定写法深浅调整:
$ 行内,$$ 行间)必须使用 Mermaid 的场景:
| 场景 | 图表类型 | 示例 |
|---|---|---|
| 算法主流程 | flowchart TD | 从输入到输出的完整流程 |
| 构造/转换过程 | flowchart LR | A → B → C → D 的步骤链 |
| 思维分支/决策 | flowchart TD | 条件判断、路径选择 |
| 样例验证 | table | 逐行验证(不用 flowchart,太冗长) |
禁止使用的图表:
Mermaid 写法要点:
<br/> 换行style 给关键节点着色(起点蓝、终点绿、判断橙、错误红)