Algorithm Competition Assistant
一个基于FastOlympicCoding插件的优化插件,适用于Sublime Text
Details
Installs
- Total 0
- Win 0
- Mac 0
- Linux 0
| Oct 10 | Oct 9 | Oct 8 | Oct 7 | Oct 6 | Oct 5 | Oct 4 | Oct 3 | Oct 2 | Oct 1 | Sep 30 | Sep 29 | Sep 28 | Sep 27 | Sep 26 | Sep 25 | Sep 24 | Sep 23 | Sep 22 | Sep 21 | Sep 20 | Sep 19 | Sep 18 | Sep 17 | Sep 16 | Sep 15 | Sep 14 | Sep 13 | Sep 12 | Sep 11 | Sep 10 | Sep 9 | Sep 8 | Sep 7 | Sep 6 | Sep 5 | Sep 4 | Sep 3 | Sep 2 | Sep 1 | Aug 31 | Aug 30 | Aug 29 | Aug 28 | Aug 27 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Windows | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Mac | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Linux | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Readme
- Source
- raw.githubusercontent.com
Algorithm Competition Assistant
Sublime Text 上更「能打」的算法竞赛测评插件 —— 一个测试点卡片 + 彩色 verdict + 逐行 diff 详情 + 真实内存/超时判定的完整闭环。
基于什么开发:本插件是 FastOlympicCoding(Jatana)的深度二次开发版本, 参考 VSCode 的 cph-ng 重做了判题结果显示(彩色 verdict、详情面板、逐行 diff), 并借鉴 FastOlympicCodingHook 集成了 Competitive Companion 浏览器插件支持。
English
Algorithm Competition Assistant is a competitive-programming test runner for Sublime Text 4 (build 4095+). It is a rework of FastOlympicCoding (Jatana), with the verdict display rebuilt after VSCode's cph-ng, and Competitive Companion support inspired by FastOlympicCodingHook.
- Run the samples of the file you are editing and get a per-test verdict (AC / WA / TLE / MLE / RE / PE / CE) as coloured cards in a panel next to the code.
- Real memory limit: the peak memory of the child process is sampled per platform (Windows
GetProcessMemoryInfo, Linux/proc/<pid>/status, macOSlibproc), so MLE is an actual verdict instead of an unused setting. A watchdog kills the whole process tree on a timeout. - Detail tab with input / expected / actual / stderr and a line-by-line diff; configurable float
tolerance and output size cap; compile cache; multi-file builds (
extra_sources,include_dirs). - Import test data from
.in/.outpairs, a folder, the clipboard, or the Competitive Companion browser extension (built-in persistent listener, port 12345 by default). - Stress test against a generator and a reference solution; a counterexample is saved as a test.
- Chinese / English UI (
languagesetting).
Getting started: open a source file, then use Ctrl+Shift+P → cph (every command is in the
command palette) or the View → Algorithm Competition Assistant menu. The default run_settings cover C++ (g++,
-std=c++17 -O2), Python, Java, C, Rust, Go, Pascal and JavaScript (Node.js) — edit them under
Preferences → Package Settings → Algorithm Competition Assistant → Settings to match your toolchain (the compiler has
to be on PATH; the Check environment (doctor) command reports anything that is missing).
-O2 matters: without optimisation a local run is orders of magnitude slower than the judge, so a
correct program gets reported as TLE.
Key bindings: the bindings live in this package's own Default (<platform>).sublime-keymap, so
they load with the package and are released again when you disable or uninstall it — nothing is ever
written into your personal keymap. Set "enable_keybindings": false to release the keys without
editing any keymap. Example (Windows|Linux|OSX).sublime-keymap holds the same entries as a
copy-paste reference if you want to change one.
Context menu: entries only appear for the file types listed in run_settings; set
"context_menu": false to hide them completely. Nothing is added to other menus.
相比原版 FastOlympicCoding,多了什么
| 能力 | FastOlympicCoding | Algorithm Competition Assistant |
|---|---|---|
| 彩色 verdict 徽章(AC/WA/TLE/MLE/RE/PE/CE…) | ❌ 只有纯文本 | ✅ 类 cph-ng 的徽章样式 |
| 真实内存判定(MLE) | ❌ 内存是死配置 | ✅ 跨平台采样进程峰值内存,超限真判 MLE |
| 超时硬杀(TLE) | ❌ 死循环杀不掉 | ✅ 看门狗到点终止整个进程树 |
| 运行错误定位(RE 位置) | ❌ | ✅ 从程序输出解析 文件:行号(Python 回溯 / Java 栈 / -fsanitize 诊断) |
| 详情视图 + 逐行 diff | ❌ | ✅ 独立标签页,可选中可复制 |
| 编译缓存 | ❌ 每次都重编 | ✅ 源文件/命令未变则跳过编译 |
| 只重跑失败 / 跑完全部 / 强制重编 | ❌ | ✅ 三个命令 + 快捷键 |
浮点容差(float_tolerance) |
❌ | ✅ 浮点题不再因 0.1+0.2 != 0.3 误判 |
| 输出体积上限(防卡死) | ❌ | ✅ max_output_bytes |
多文件编译(extra_sources / include_dirs) |
❌ | ✅ |
| 环境自检 doctor | ❌ | ✅ 一条命令排查 + 可粘贴的 Markdown 报告 |
| 纯键盘操作(选测试点→操作) | ❌ | ✅ Ctrl+Alt+M |
| 对拍反例自动入库 | ❌ | ✅ |
| Competitive Companion 持久监听 | ⚠️ 需 Hook | ✅ 内建、可反复点击 |
| 中英文双语界面 | ❌ | ✅ |
| 测试面板自适应宽度 | ❌ | ✅ 卡片放不下时自动加宽 |
工程上还有:Python 3.3 兼容(Sublime 插件宿主)、四平台 CI(Linux 3.8/3.12 + Windows + macOS)、80+ 项回归测试。
主要功能
1. 类 cph-ng 的测评结果显示
每个测试点显示:
- 彩色 verdict 徽章:
AC(绿)、WA(红)、TLE(黄)、MLE(紫)、RE(蓝)、PE(粉)、CE(黄)等 - 运行时间:毫秒级,超过 5 秒自动换算成秒
- 内存占用:MB / GB(跨平台真实采样进程峰值内存:Windows 用
GetProcessMemoryInfo、Linux 读/proc/<pid>/status的VmHWM、macOS 用libproc.proc_pid_rusage),超限会真的判MLE - 超时硬杀:超过时间限制会被自动终止并判
TLE,不会出现死循环杀不掉;手动停止的测试显示SK - 运行错误定位:程序崩溃(
RE)时,若输出里有位置信息(Python 回溯、Java 栈、-fsanitize诊断),卡片详情会显示运行错误 (RE) 位置: main.py:12,状态栏同时提示 - 三个按钮:
编辑、运行、详情
C++ 想拿到 RE 行号? 普通的段错误不带行号。把编译命令加上
-fsanitize=address,undefined -g -fno-omit-frame-pointer(在run_settings里自定义compile_cmd),崩溃时就会输出main.cpp:12:5: runtime error: ...,插件会自动解析出行号。
2. 详情视图(detail)+ 逐行 diff
点击 详情 打开一个真实的编辑器标签页(xxx - test N detail),文字可选中、可复制:
- 预期输出 / 实际输出 / 错误输出 (stderr)
- Diff:预期与实际逐行对比(忽略行末空格与末尾换行),只列出有差异的行
- 顶部显示 verdict + 运行时间 + 内存占用
运行结束后再次点击 详情 会自动刷新。
3. 正确/错误答案快捷标记
运行结束后输出下方出现 accept / decline:accept 把当前输出记为正确答案,decline 记为错误答案。
4. 集成 Competitive Companion 浏览器插件
- 在 Sublime Text 中打开要做题的代码文件
- 右键选择
Algorithm Competition Assistant: Listen to Competitive Companion - 浏览器打开题目页,点 Competitive Companion 扩展的绿色
+ - 样例与时间/内存限制自动发送到 Sublime Text、存进测试文件并自动运行
监听器是持久的(cph-ng 风格):启动一次后可反复点击发送不同题目,不会端口冲突或报 “Can't restore session";在另一个文件上再次执行该命令 = 切换监听目标;Stop Competitive Companion listener 随时停止。
注意:需要在 Competitive Companion 扩展的端口列表里加入 12345(可用设置项 companion_port 修改)。
5. 国际化 (i18n)
默认中文,可切换:
- 菜单:
Tools→Algorithm Competition Assistant→Switch language (中/EN) - 命令面板:
Algorithm Competition Assistant: Switch to English/切换为中文 - 右键菜单:
Switch language (中/EN) - 设置:
"language": "en"或"zh"
6. 运行模式与效率
- 编译缓存:源文件(含多文件依赖)与编译命令没变时跳过编译;需要时
Ctrl+Alt+Shift+R强制重编 - 只重跑失败 / 跑完全部:
Ctrl+Alt+R只重跑没 AC 的点,Ctrl+Alt+Shift+B跑完全部(默认第一个失败即停,可用stop_on_first_failure改) - 浮点容差:设置
float_tolerance(如1e-6),数字型输出按相对/绝对误差比较 - 输出上限:
max_output_bytes(默认 8MB)防止疯狂输出卡死编辑器,超出部分会被截断并给出提示 - 多文件编译:
run_settings里用extra_sources(glob)与include_dirs,编译命令中用{extra_sources}/{include_dirs}占位符 - 面板汇总行:底部显示
4/5 通过 · 首个失败 test 3 · 总用时 1.24s - 自定义判定器(SPJ):
run_settings里填checker即可用 testlib 风格的 checker(三个文件参数 + 退出码判定),多解题不再只能靠 token 比较 - 交互题:填
interactor即按 testlib 约定接线,选手程序与 interactor 双向对话,退出码即判决 - Subtask 分组:
subtasks里分组,组内全 AC 才拿分,汇总行显示部分分 - Benchmark / 机器校准 / 练习统计 / 比赛计时 / 抓题与题面预览 / 保存自动运行:命令面板里搜
Algorithm Competition Assistant:都能找到 - 错误位置可点击:RE 的
文件:行:号和编译器的每条诊断都会渲染成链接,点一下直接跳到源码那一行(已经打开的标签会被复用,不会新开一个) - Debug / Release 一键切换(
Ctrl+Alt+G):Debug 去掉优化并加-g -fsanitize=address,undefined,崩溃时能给出精确行号;Release 保证-O2并去掉 sanitizer,计时与评测机可比。按文件记忆,不写你的设置文件;当前模式显示在运行面板状态栏 - 并行运行(
Ctrl+Alt+Shift+P):每个测试点一个独立进程、parallel_workers(默认 4)个 worker 同时跑。串行时 5 个点里有 2 个 TLE 要等 2×时限,并行约 ¼ - 环境自检:
Ctrl+Alt+D检查编译器是否在 PATH、端口占用、测试路径可写、资源可加载,并给出一段可粘贴到 issue 的 Markdown 报告 - 纯键盘流:
Ctrl+Alt+M选测试点 → 运行 / 详情 / 编辑 / 接受 / 拒绝 / 删除 - 对拍反例入库:对拍发现反例自动保存为正式测试点(可用
stress_save_counterexample关闭) - 统一合并策略:导入文件 / 剪贴板 / 浏览器 / 对拍反例四条路径共用「按输入去重、答案只补不覆盖」,重发样例不会顶掉你手动标记的答案
7. 测试面板自适应宽度
右侧运行面板默认只占窗口 32%;卡片按钮放不下时,插件会在每次刷新后自动加宽,直到最宽的卡片能一行放下:
- 只在需要时加宽,从不自动收窄
- 上限为半个窗口(可配置)
{
"auto_fit_panel_width": true,
"max_panel_width_ratio": 0.5
}
安装
- 克隆或下载本仓库
- 把
Algorithm Competition Assistant文件夹复制到 Sublime Text 的Packages目录 - 重启 Sublime Text
使用方法
- 打开 C++ 源文件
- 按
Ctrl+Alt+B(Mac:Cmd+Alt+B)启动测评 - 右侧打开测试运行窗口,可输入/编辑测试数据
- 测评结束后每个测试点显示 verdict 徽章
- 点
详情看带逐行 diff 的详情页;点编辑打开输入(test N -edit)与标准答案(test N -answer)两个标签页,在答案页填好预期输出后save即可自动重新评判
关于默认运行命令:默认
run_cmd用正斜杠路径,Windows / Linux / macOS 通用。想换成自己的写法,把run_settings复制到 User 设置里覆盖即可。
已知限制
- macOS 内存占用是单进程实时采样(
libproc.proc_pid_rusage)的峰值,不是内核严格意义上的峰值 RSS,可能比 Activity Monitor 略低;已不再使用RUSAGE_CHILDREN(所有子进程累计峰值)那种错误口径。 - 裸段错误(C++)不带行号:RE 位置只在程序输出包含位置信息时才有(Python 回溯 / Java 栈 /
-fsanitize诊断);纯 C++ 段错误需要自行加-fsanitize编译。 sync_output(逐字符同步输出)默认关闭:开启后一个字符刷新一次视图,只适合交互式程序。- stderr(
cerr调试输出)只显示在详情视图里,不再挂在卡片上(卡片会变得又挤又长)。 - "还没粘贴样例"的时间不计时:新建测试点后如果输入还是空的,程序虽然已经启动, 但运行计时与 TLE 看门狗都在等你输入——从你粘贴/输入的第一个字符、或程序第一次输出开始才算。 因此不会出现"样本还没粘完就已经 TLE"。
- RE 优先于 TLE:程序崩溃时看判定退出码(访问越界 / 除零 / 栈溢出 /
abort)和错误输出里的 崩溃特征(terminate called after throwing、Traceback、AddressSanitizer…), 即使恰好超时被杀也判 RE;普通的cerr调试输出不会被误判。 - 空样例不会保存:没有任何输入也没有答案的空白测试点只存在于当前面板(它是用来接收 你粘贴样例的占位),不会写进测试文件。
- **
PE(Presentation Error)**:只有「token 完全相同但空白/换行不同」才算 PE,默认与 WA 分别显示;若你的 OJ 把 PE 也算通过,把regard_pe_as_ac设为true。 - 输出超过
max_output_bytes(默认 8MB)时超出部分会被丢弃,并插入一行截断提示。 - 抓题没有页面体积上限:
core/cph_fetch.py直接response.read()把整页一次性读进 内存,不按字节截断——题库整页嵌入、大图多的站点会照单全收,内存占用只跟页面大小成正比。 唯一的闸门是fetch(url, timeout=25)的 25 秒:超时按抓取失败报抓取失败:…(英文环境 是fetch failed: ...),不会给你半页题面。题面本身不做任何长度裁剪,样例、标题、题面正文 有多长就写多长(该模块里唯一的定长函数first_lines(text, limit=200)目前没有任何调用方, 是留给以后做摘要的死代码,所以状态栏与消息里也没有 200 字的截断)。 题面转 Markdown 时会丢掉<script>/<style>/ 注释,所以靠内嵌脚本渲染的题目 (少数动态 OJ)会解析成空,此时提示「题面解析为空(可能需要在浏览器里登录)」。 - 非 ASCII 文件名靠自动识别:Windows 上编译器按 ANSI 代码页写出的
中文.exe在磁盘上会变成另一个名字(GBK 字节被当成 latin-1 读),插件编译后会核对产物、 按真实的文件名去运行,并在控制台说明(the binary is ... on disk, not ...)。 如果你的编译命令把-o写到别处,请保证输出名用引号包起来。
快捷键
绑定随插件包一起加载(
Default (<你的平台>).sublime-keymap),不会写进你自己的 keymap。 所以禁用或卸载本插件时,这些按键会自动还给其它插件,不会留下"占着键位却没人响应"的死绑定。
- 想临时让出键位:设置
"enable_keybindings": false,不用改任何 keymap。- 想改某一个键:在
Preferences → Key Bindings里覆盖同一条即可 (Example (<你的平台>).sublime-keymap里有同样的条目可以直接抄)。下表里的按键就是随包默认生效的绑定(macOS 上
Ctrl+Alt对应Cmd+Alt)。 面板内的Enter / Ctrl+V / Ctrl+D …只在本插件的测试编辑/详情视图里生效。
| 按键 | 功能 |
|---|---|
Ctrl+Alt+B (Mac: Cmd+Alt+B) |
运行测试 |
Ctrl+Alt+I (Mac: Cmd+Alt+I) |
从文件导入测试 |
Ctrl+Alt+S (Mac: Cmd+Alt+S) |
开始对拍(对拍输出页上也按它 = 重新跑该文件的这场对拍) |
Ctrl+Alt+Shift+S (Mac: Cmd+Alt+Shift+S) |
停止对拍,只在对拍输出页生效;多个文件同时对拍时停的是当前页这一场 |
Ctrl+Alt+L / Ctrl+Alt+Shift+L (Mac: Cmd+Alt+L / Cmd+Alt+Shift+L) |
开启 / 停止 Competitive Companion 监听 |
Ctrl+Alt+P 或 Ctrl+K, Ctrl+P (Mac: Cmd+Alt+P 或 Cmd+K, Cmd+P) |
收缩 / 恢复右侧测试面板 |
Ctrl+Alt+T (Mac: Cmd+Alt+T) |
展开模板片段(光标停在关键字后,如 fastio) |
Ctrl+Alt+V (Mac: Cmd+Alt+V) |
用剪贴板内容新增测试点(输入 --- 输出 可同时带答案) |
Ctrl+Alt+C / Ctrl+Alt+Shift+C |
复制当前测试的 预期输出 / 实际输出 |
Ctrl+Alt+E (Mac: Cmd+Alt+E) |
把全部测试导出成 1.in / 1.out 文件对 |
Ctrl+Alt+R (Mac: Cmd+Alt+R) |
只重跑失败的测试点(已 AC 的自动跳过) |
Ctrl+Alt+Shift+B |
跑完全部测试点(不因失败中断) |
Ctrl+Alt+Shift+P |
并行跑完全部测试点(多进程,TLE 多时总时长约 1/4) |
Ctrl+Alt+Shift+F |
从题目 URL 抓题:样例变测试点(可同时打开题面) |
Ctrl+Alt+Shift+V |
把题目题面转成 Markdown 打开 |
Ctrl+Alt+Shift+K |
Benchmark 当前测试点(跑 N 次报最快/平均/最慢) |
Ctrl+Alt+Shift+T |
比赛计时器(状态栏倒计时,可停止) |
Ctrl+Alt+Shift+R |
强制重新编译后运行(忽略编译缓存) |
Ctrl+Alt+G (Mac: Cmd+Alt+G) |
切换 Debug / Release 编译模式(状态栏显示当前模式) |
Ctrl+Alt+D (Mac: Cmd+Alt+D) |
环境自检(编译器 / 端口 / 路径 / 资源) |
Ctrl+Alt+M (Mac: Cmd+Alt+M) |
键盘选择测试点并运行 / 详情 / 编辑(不用鼠标) |
Enter (在 TestSyntax 中) |
插入行 |
Ctrl+Enter (在 TestSyntax 中) |
新建测试 |
Ctrl+V / Cmd+V (在 TestSyntax 中) |
粘贴 |
Ctrl+X / Cmd+X (在 TestSyntax 中) |
终止进程 |
Ctrl+D / Cmd+D (在 TestSyntax 中) |
删除测试 |
Ctrl+Shift+Up/Down (在 TestSyntax 中) |
交换测试顺序 |
对拍 (Stress Test) 教程
对拍 = 用随机数据生成器不停测试你的程序和标准程序 (std),一旦输出不一致就停下,把出错的输入和两边输出展示给你。适合排查 WA 的边界情况。
1. 准备三个文件(放在同一目录)
- 你的程序:当前打开的文件,如
main.cpp - 标准程序 std:保证正确的写法(暴力 / 题解做法),默认
std.cpp - 数据生成器 gen:往 stdout 打印一组随机数据,默认
gen.cpp
gen.cpp 示例(随机生成两个 1~10 的数):
#include <bits/stdc++.h>
using namespace std;
int main() {
srand(time(0) + rand());
int a = rand() % 10 + 1, b = rand() % 10 + 1;
printf("%d %d\n", a, b);
return 0;
}
2. 启动对拍
在你的程序的编辑视图里任选一种:
- 菜单:
View→Algorithm Competition Assistant→Start stress test - 命令面板:
Algorithm Competition Assistant: Start stress test - 快捷键:
Ctrl+Alt+S(Mac:Cmd+Alt+S)
不需要填路径:命令会先在当前源文件所在目录里按名字找 std 和生成器
(std / brute / bf / sol / 暴力 与 gen / data / maker / rand / 生成 等),
找到就直接开跑,轮数与时间限制用设置里的 stress_max_rounds / stress_time_limit_seconds。
目录里有多个候选时会列出来让你选一个;一个都找不到时才会请你挑文件 —— Windows 上直接弹
系统「打开文件」对话框,起始目录就是当前源文件所在目录,其它平台用命令面板浏览
(stress_file_picker 可改成 native / panel)。
想每次都自己指定,用命令面板里的 Algorithm Competition Assistant: Stress test with options (pick files, rounds),
它会依次问 std、生成器、每轮时限和最大轮数。
3. 查看结果
会打开 xxx -stress 输出窗口:
- 每轮通过滚动显示
第 N 轮 ... OK - 发现不一致时立即停止,展示:输入数据、你的输出、std 输出、逐行差异(
user:vsstd:) - 跑满最大轮数全部一致则显示对拍通过;全部轮次超时会明确提示「未比较任何输出」
- 结束时一定会报告一行「对拍结束,用时 X 秒」,状态栏同步显示当前轮次,跑得慢和卡住能分清
- 中途可用
Stop stress test(Ctrl+Alt+Shift+S)停止,立即生效:正在跑的那个进程会被直接结束,不用等这一轮的时限走完。这个快捷键只在对拍输出页生效,切到哪个对拍页就停哪一个,不会影响其它操作 - 支持多个文件同时对拍:每个文件有自己的
xxx -stress输出页,同一文件重复开始会复用它自己的页面;关闭某个对拍页会自动停止它对应的那场对拍 - 多解题 / 浮点题也能对拍:
run_settings里配了checker时由 checker 判定 (不再逐行比对,输出任意合法方案都不会被误报),checker 的quitf消息会跟着反例 一起显示;没配 checker 时float_tolerance同样生效,最后一位小数的差异不再算不一致
4. 注意事项
- 三个程序都从 stdin 读、往 stdout 写,调试信息请用
cerr(配合"ignore_stderr": true) - Python 文件也可以直接作为你的程序 / std / gen 参与对拍
- 对拍会使用
run_settings里的编译命令;失败的反例可自动存为正式测试点 - 对拍的编译命令会自动去掉
-DLOCAL/-DDEBUG:这两个宏会把本地评测用的调试输出 (#ifdef LOCAL里的cerr、读文件等)带进对拍,白白拖慢每一轮;你自己的 Run/编译 仍然用设置里完整的命令。插件自带的默认设置也不再包含-DLOCAL - 对拍的可执行文件编译在独立的临时目录里,不会占用你源码目录下的
.exe: 对拍跑着的时候照样可以编译运行同一个文件 - 需要给整轮对拍设总时长上限时用
stress_max_wall_seconds(默认 0 表示不限) - 生成器有独立的时间上限:
stress_generator_time_limit_seconds(默认 10 秒)。 造数据通常比解题慢,用程序本身的时限(stress_time_limit_seconds)卡生成器会把 「生成器超时」误判成「生成器失败」。生成器超时会跳过该轮,连续 3 次才停止并提示。 - **
-DLOCAL+ 循环里的debug()会让本地运行超时**:std::cerr默认不缓冲,把整个 数组丢给cerr的调试语句放在主循环里时,输出量是 O(n²),本地 n=2000 就要 20 秒以上 (实测同一份代码不加-DLOCAL只要 0.02 秒)。提交前记得删掉这类调试输出,或把编译 命令里的-DLOCAL去掉(对拍已经自动去掉,普通运行仍然按你的设置来)。 - 文件名里有连续空格也没问题:
P2517 ZJOI 2010, 基站选址.cpp这类名字会被原样传给 编译器。以前「美化编译命令」时会把引号内的连续空格折叠成一个,导致 cc1plus 报No such file or directory(磁盘上明明有这个文件)
致谢
本插件基于以下开源项目:
- FastOlympicCoding —— 基础框架(本插件由其二次开发而来)
- cph-ng —— verdict 颜色与详情面板设计灵感
- FastOlympicCodingHook —— Competitive Companion 集成思路
设置示例
在 Algorithm Competition Assistant.sublime-settings 中:
{
"language": "zh",
"run_settings": [
{
"name": "C++",
"extensions": ["cpp"],
"compile_cmd": "g++ \"{source_file}\" -std=c++11 -o \"{file_name}\"",
"run_cmd": "\"{source_file_dir}\\{file_name}.exe\" {args} -debug",
"time_limit_ms": 2000,
"memory_limit_mb": 256
}
],
"tests_relative_dir": ""
}
想要 C++ 崩溃时给出行号,把
compile_cmd改成:g++ "{source_file}" -std=c++11 -g -fsanitize=address,undefined -fno-omit-frame-pointer -o "{file_name}"