算法竞赛训练工具:拉题/题面、样例自测(计分/自定义测试)、AI 找错/审思路/题解/调题单、同题 AC、浏览器提交、五平台账号/Handle、Competitive Companion 接收器。
Marketplace 安装后仍需 clone cph-add-tool 仓库并用 VS Code 打开:插件命令会调用仓库里的 tools/ 脚本;只有插件没有脚本时按钮会提示脚本不存在。
本插件是「工作区工具启动器」:需要配合 cph-add-tool 仓库里的 tools/ 脚本使用(clone 仓库并用 VS Code 打开该文件夹)。只有插件、没有仓库时,按钮会提示脚本不存在。
交流群:QQ 188241279(问题反馈 / 使用交流 / 更新通知)
安装 / 更新 / 卸载
powershell -NoProfile -ExecutionPolicy Bypass -File tools\install-vscode-extension.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File tools\install-vscode-extension.ps1 -Uninstall
装完 Ctrl+Shift+P → Developer: Reload Window 生效。
三种入口
- 活动栏图标(左侧竖条,🎓 图标 →「算法训练」):点开就是按钮面板,点按钮直接运行
- 状态栏左下角「🎓 算法训练」:弹出命令菜单
- 命令面板:
Ctrl+Shift+P 搜 算法训练
面板里有什么
- 当前题单(顶部):显示
training/plan.json 里的本周题目,每道题一行(平台徽章 + 题目 + 难度),点一下直接在浏览器打开;下面是「刷新 / 完整题单」和重做队列入口
- 按钮分组:
| 分组 |
按钮 |
作用 |
| 训练 |
生成 / 刷新周题单 |
从 Codeforces + AtCoder + 洛谷三个平台选题,生成 training/plan.md / plan.json,面板自动刷新 |
| 训练 |
复盘最近一场 / 复盘指定比赛… |
跑 cf-review.ps1,打开 review.md |
| 题面 |
打开当前题面预览 |
打开当前 cpp 同目录 <题号>.md |
| 题面 |
重新抓取当前题面 |
跑 cph-statements.ps1 -Solution <当前 cpp> -Force |
| 代码 |
编译并跑样例 / 只编译 |
跑 cp.ps1 samples/build |
| 设置 |
设置 CF handle |
写 training/cf-handle.txt |
| 帮助 |
打开训练手册 |
打开 training/README.md 预览 |
题单来源
- Codeforces:官方 problemset API,按你的弱项 tag + rating 区间挑
- AtCoder:kenkoooo 公开题库 + difficulty 模型,默认难度
rating±200
- 洛谷:题库列表页(difficulty 3/4),脚本自动拿 C3VK cookie
- 默认数量分配:CF 占一半,其余 AtCoder/洛谷均分;某平台失败会自动用 CF 补位
抓取整场比赛(Codeforces / AtCoder / 洛谷 / 牛客)
面板「训练」分组 → 📥 抓取整场比赛(CF/洛谷/牛客/AtCoder),粘贴比赛链接即可:
https://codeforces.com/contest/2278(正赛;Gym/私有比赛需要登录,不支持)
https://atcoder.jp/contests/abc402
https://www.luogu.com.cn/contest/251050
https://ac.nowcoder.com/acm/contest/85333
抓取过程中进度通知上有取消按钮(可随时中断);抓取完成后可点「选择题目打开」→ 选一道题,会打开 cpp 并把题面 md 分屏到侧边。
单个题目用面板「📥 抓取单个题目」或命令行 --single,会生成 md/cpp/.cph 并直接打开两栏。
会为每道题生成:<题号>.md 题面(英文自动 AI/ Bing 翻译)、<题号>.cpp(按初始模板生成)、<题号>.json 结构化题面数据、.cph 样例缓存(样例自测面板 / cp.ps1 samples 都能直接跑样例);整场还会生成 contest.json。已存在的 md 默认跳过,需要刷新在终端加 --force。
初始模板默认是仓库根目录的 new.cpp,可以这样改:
- 面板「🧩 设置拉题初始模板」→ 选一个
.cpp 文件
- VS Code 设置
algorithm-training-tool.pull.template(相对路径或绝对路径)
- 命令行
--template=<文件>,或 training/pull-config.json 里的 "template"
Codeforces 题面页有 Cloudflare 防护,cph-statement.js 会在 403 时自动改用洛谷镜像 luogu.com.cn/problem/CF<contestId><index> 抓题面;Gym/私有比赛仍需要登录。
Competitive Companion 接收器(推荐,CF Gym/反爬)
CF 现在对脚本请求返回 Cloudflare 403(Just a moment...),Cookie 不稳定。推荐用浏览器:
- 浏览器安装 Competitive Companion
- 插件启动本地接收器(默认
127.0.0.1:27121)
- 浏览器打开题目页 → 点 Companion 的「+」
- 自动生成
<题号>.cpp/.json/.md
面板「快速开始 → Companion 接收」可看状态;端口设置 algorithm-training-tool.companion.port。
Gym/私有比赛推荐用这个方式,不需要把 Cookie 交给脚本。
提交到 OJ
样例自测面板顶部新增 🚀 提交到 OJ:
- 自动读取当前题的
<题号>.json / .cph 缓存里的题目链接,判断 OJ
- 提交前会保存当前文件(含未保存修改)
- 支持 Codeforces(正赛/Gym)、洛谷、AtCoder 自动提交;牛客暂不支持自动提交
- 自动提交需要对应平台 Cookie;CF/洛谷被反爬拦截时建议用 🌐 浏览器提交(复制代码):自动复制当前代码并打开提交页,在网页粘贴提交
- 提交成功显示提交记录链接,可在浏览器打开
浏览器登录 / 自动提交(实验性)
- 面板「账号 → 浏览器登录」选择平台,工具会用本机 Edge/Chrome 的独立 profile(
training/browser-profile/)打开登录页;登录态保存在该 profile
- 样例自测面板「🖥 自动提交(浏览器)」通过 CDP 打开提交页、填入当前代码、选择 C++ 语言并点击提交;支持 Codeforces / AtCoder
- 需要先在「浏览器登录」里登录对应平台;首次会弹出可见浏览器窗口
- 自动提交尚未用真实账号完整验证;失败时用「🌐 浏览器提交(复制代码)」手动提交更稳
账号登录
活动栏「算法训练」→「账号登录」:
- 登录 Codeforces / 洛谷 / 牛客 / AtCoder:点按钮 → 「打开登录页」先在浏览器登录 → 回来点「粘贴 Cookie」→ 粘贴对应网站的 Cookie 请求头
- 登录成功后自动读取昵称并显示在面板顶部「账号:」一行;CF 同时会更新 handle
- 支持「检查账号状态」批量校验已保存的 Cookie;「清除平台 Cookie」可按平台或全部清除;「打开 Cookie 目录」直达 training
- Cookie 只保存在本机
training/cf-cookies.txt / training/cookies.<platform>.txt,已 gitignore
- 注意:CF 当前对 curl 请求有 Cloudflare 拦截,Cookie 登录/自动抓取可能 403;Gym 请优先用 Companion 接收器
- 另外支持 设置各平台 handle(CF/洛谷/牛客/LeetCode/AtCoder,存
training/handles.json),用于公开主页/同题 AC 查询
样例自测(计分)
活动栏「算法训练」→「样例自测」块:读取当前题目的 .cph 缓存或 <题号>.json,点「▶ 运行全部测试」编译并逐题运行,显示样例/自定义通过数、总得分、百分比;每个测试点可直接编辑输入/期望输出、单测运行并保存。每个测试点都可以实时编辑输入/期望输出:点「▶ 运行此测试」只跑这一条,点「▶ 运行全部测试」会先自动保存所有编辑再跑(样例修改存 <题号>.sample-overrides.json,自定义存 <题号>.custom-tests.json)。打开/切换 .cpp 时面板自动刷新,不需要手动「重新读取」。
AI 助手(OpenAI 兼容 API)
三个地方都能设置,任选一个:
- 面板「AI 助手」分组 → ⚙️ 设置 AI API(弹输入框:baseUrl → 选模型 → API Key → 自动提示测试连接)
- 面板「🧰 在 VS Code 设置中编辑」或
Ctrl+, 搜 算法训练(配置项 algorithm-training-tool.ai.baseUrl / ai.model / ai.apiKey / ai.temperature)
- 直接编辑
training/ai-config.json
左下角状态栏会显示 $(sparkle) AI 已配置 / AI 未配置,点一下就能改。DeepSeek 当前模型名是 deepseek-flash / deepseek-v4-pro。
| 按钮 |
作用 |
| 💡 AI 提示(当前题) |
先读你**当前编辑器里的代码(包括未保存的修改)**做「代码体检」(思路对不对/哪里可能是 bug/哪一步没写完),再按级别给针对性提示;教练模式,不直接给完整代码 |
| ❓ 问 AI(当前题) |
带题面 + 当前代码提问,默认只给思路 |
| 🧠 AI 复盘(选比赛) |
先刷新 review.md 数据,再生成 review.ai.md(卡点/关键观察/总结) |
| 🌐 AI 翻译当前题面 |
重抓题面并用 AI 翻译(失败自动退回 Bing) |
| ⚙️ 设置 AI API / 🔌 测试 AI 连接 / 🧰 VS Code 设置 |
配置与连通性测试 |
配置好后,拉题自动生成的中英题面也会优先用 AI 翻译。生成的 AI 结果在 .build/ai-hint.md / .build/ai-answer.md 或比赛目录 review.ai.md,并自动打开预览。
题面自动预览
打开任何有同名 .md 的 .cpp 时,会自动在侧边分屏题面预览;VS Code 设置 algorithm-training-tool.autoStatementPreview=false 可关闭
拉题后题面 md 生成完会自动在右侧打开预览,但只对当前正在编辑的那道题生效:整场拉题(一次拉很多题)时不会弹出一堆预览,只有最后一个正在编辑的题目会开
30 秒内同一份题面不会重复弹预览
想彻底关掉:VS Code 设置里把 algorithm-training-tool.autoPreview 设为 false(或用 Ctrl+, 搜 算法训练)
说明
- 需要打开本工作区根目录(扩展按
workspaceFolders[0] 找 tools/)
- 所有输出在 输出 面板的「算法训练工具」频道
- 改完源码后跑一次
install-vscode-extension.ps1 再 Reload