Olympia IDE

使用手册 · 对应 Olympia v1.0.0

每一件事在哪里点

Olympia 是面向信息学竞赛的 VS Code fork。这份手册只讲 Olympia 自己加的那部分: 编译器与评测机档位、提交前体检、跑样例、对拍、比赛模式、题面与模板、AI 教练, 以及装完之后最容易卡住的地方。编辑器本身的操作和 VS Code 一样。

不想读全文?直接看十分钟上手或快捷键表。

十分钟上手

装完到第一次运行,正常只需要这三步。

  1. 打开题目文件夹。「文件 → 打开文件夹」选你放 .cpp 的目录。内置 g++ 15.2.0 会被自动找到,不需要配 PATH。
  2. 写代码,按 F9。Olympia 按当前评测机档位编译;编译通过后在面板里运行,运行前会让你选输入来源:直接运行(空 stdin)或选一个数据文件当作 stdin。想现场改输入就再按一次 F9 换个文件。
  3. 保存即体检。每次保存都会静默扫描会在评测机上编译失败的写法,结果显示在「问题」面板,不弹窗、不打断你打字。

第一次启动不用配任何东西:出厂主题是 One Dark Pro,键位用默认那套;左边的「竞赛工具」面板会自己展开一次, 告诉你现在编译器是哪个、编译档位设成什么、能按哪些快捷键。之后随时可以从顶部「帮助」菜单 或命令面板搜「欢迎」重新打开欢迎页,那里有一组十步的 Olympia 向导:编译并运行、拉题面跑样例、 对拍、比赛模式、全部设置,每一步点下去就是真的执行那条命令,做完自动打勾。

功能放在哪里

不用去命令面板里翻,三个常驻位置都能点。

左侧 Olympia 面板

  • 当前环境:编译器、编译配置、提交前体检、题面库、解题记录、比赛剩余时间
  • 编译与运行:编译并运行、编译当前文件、按评测机编译(-O2)、提交前体检、跑样例(本地评测)、对比期望输出、对拍(正解 vs 暴力)、比赛模式(倒计时)
  • 题目与模板:拉取题面、从剪贴板拉取题号、打开题面库、打开原题网页、给这道题加一组自定义样例、集训清单、插入赛制模板、编辑我的模板
  • AI 教练与帮助:AI 设置(地址 / 密钥 / 模型)、全部设置(编译 / 评测 / 对拍 / 题面)、环境自检、打开官网与文档、许可证与第三方组件

底部状态栏

左下角三枚 chip,点一下就执行:洛谷 · C++23(换档位)、编译运行 F9、体检结果。 比赛开始后这里还会出现倒计时。

编辑器标题栏

当前文件右上角放了最常用的六个动作:编译并运行、编译当前文件、按评测机编译、提交前体检、拉取题面、插入赛制模板。

帮助菜单

菜单栏 帮助 里留下的几项都指向这个产品自己的东西:文档、发行说明、许可证文本, 以及 报告问题——前两项就是本套文档的这个站点。 上游那些指向 Microsoft 页面的入口(简介视频、技巧与窍门、隐私与条款之类) 因为产品里没配对应地址,压根不出现。 调试器、源代码管理这些竞赛用不到的入口默认从侧栏摘掉了。

编译与评测机档位

本地能过、交上去挂,多数是编译参数不一样。Olympia 直接把评测机的开关拿来用。

三档预设

  • 洛谷:GCC 15.1.0 口径,-std=c++23
  • NOI Linux 2.0(洛谷默认提交):GCC 9.3.0 口径,-std=c++14
  • 自定义:自己填参数,见 olympia.compiler.customFlags

两档预设共用的开关:-x c++ -fPIC -DONLINE_JUDGE -Wall -fno-asm -lm -march=native。

怎么切

点状态栏的 洛谷 · C++23,或者用命令「选择评测机编译配置」。

三个编译动作和它们的键位:

  • F9 编译并运行
  • Shift+F9 只编译,看有没有错误
  • Ctrl+Shift+F9 按评测机编译(强制 -O2,用来复现评测机行为)

默认 olympia.compiler.optimization 是 none:本地调试保持不优化,报错信息才对得上行号。 想确认 Olympia 到底跑了什么命令,Olympia 编译 输出面板会把完整 g++ 命令行打印出来(可用 olympia.compiler.showCompileCommand 关掉)。

系统里已经有编译器、不想用内置的?把 olympia.compiler.path 填成你自己的 g++.exe 路径;留空则优先用内置工具链,其次找 PATH。

提交前体检

只报会在评测机上编译失败的写法,不当代码风格老师。

触发方式:保存时自动扫描(静默,结果进「问题」面板),或按 Ctrl+Alt+Enter 主动体检一次。

检查项为什么会挂对应设置
#pragma GCC optimize、__attribute__((optimize)) 洛谷改过 GCC,这类优化属性在评测机上行为和你本地不一样,常见直接 RE 或答案错 olympia.check.rules.pragmaOptimize
asm、and、or、not、xor 当变量名 MSVC 允许,GNU C++ 里它们是关键字,换个评测机就编译不过 olympia.check.rules.reservedWord
gets、random_shuffle、register C++17 之后标准已经删掉,新评测机直接报错 olympia.check.rules.removedCpp

整体开关是 olympia.check.enabled。两档触发各管一层:olympia.check.onBlockDone 是写完一个部件就用编辑器内置的语法解析查结构(毫秒级,不启动编译器,所以它不会说「编译通过」),olympia.check.onSave 是真编一遍(「编译不过」这句话由它说)。体检不会改你的代码,也不会自己弹提示。

跑样例(本地判 AC / WA)

把题面样例当测试用,不联网、不需要账号。

  1. 先用 Ctrl+Alt+P 拉题面,或 Ctrl+Alt+O 打开一份已经缓存的题面。
  2. 写好代码,按 Ctrl+Alt+J。
  3. Olympia 用当前档位编译,把每组样例的输入喂进去,按 token 比对输出,并按题面里写的时限和内存限制判断有没有超时、超内存。

结果给出 AC / WA / RE / TLE / MLE。判成 WA 时日志会先说清错在哪: 第几行、第几个数或第几个词不同(期望多少、得到多少),或者「只输出了前 N 行」「多了 N 行」 「每行都有、只是顺序不同」「程序没有任何输出」——写完一句诊断,再按 Ctrl+Alt+K (或点通知里的 对比期望输出)用编辑器的并排差异视图把期望输出和你的输出整份摆出来对着看, 不用自己抄题面、也不会往工程里写临时文件。 每组还会打印耗时和峰值内存,超内存时按「峰值 > 上限」判 MLE。

读不到题面或题面里没有样例时,命令会让你先选一份缓存题面,不会凭空判你错。时限认「时限:1000ms」「时限:1 秒」这两种写法, 内存认「内存限制:128.00 MB」「内存:128M」「内存:1GB」这类写法。

峰值内存是每隔 30 毫秒采样一次的,短命进程会漏掉峰值,所以这个数字只会偏小不会偏大: 判了 MLE 就是真超了,没判不代表一定安全。题面没写内存限制时只报峰值、不判 MLE;想强制一条上限就填 olympia.judge.memoryLimitMb。

代码文件名和题面不一样时(比如 test.cpp 测 P1001),第一次会让你选一次用哪道题的样例, 之后同一份文件不再问——改一版跑一次是最常做的动作,每跑一次都要挑题面就没法用了。输出通知里有 换一道题,点它才会重新问;.olympia/problems 里的题面被删掉也会自动回到选择列表, 不会拿一份读不到的题面来判你。题面文件名和代码同名时永远优先用同名的那一份。

判成 AC 的时候会在工程里记一条解题记录(.olympia/solves.json:题号、耗时、峰值内存、时间), 左侧 Olympia 面板「当前环境」里那行「解题记录 N 题 · 连续 D 天 · 今日 x 题」就是它,点开能按题号搜、选中打开那道题的题面。 记录跟着文件夹走,换台机器打卡还在;不想记就关 olympia.train.recordSolves,已有的记录不动。

对拍

正解和暴力互相验证,不用装 Python,也不用手写 fc 脚本。

按 Ctrl+Alt+S,依次选三个文件:正解、暴力(或慢但一定对的写法)、随机数据生成器。 Olympia 把它们都编译好,然后循环:

轮数由 olympia.stress.rounds 控制(默认 100 轮),单个程序的运行上限是 olympia.stress.timeoutMs(默认 2000 ms),超上限按不一致处理。

生成器报错不弹框,那轮直接跳过并继续;想确认的话看 Olympia 输出面板。

抓到不一致时,提示里有 补进题面样例:点一下,这组数据和正解的输出就写进那道题的题面, 变成永久的一组样例,之后每次跑样例都会带上它。题面本来就是普通文本,想再加边界数据,直接在 ## 样例数据 里照着 ### 样例 3 的样子补一段就行。

只有两边都跑完、纯粹输出不一样时才给这个按钮——超时或崩溃的那一轮没有可信的「正确答案」可写。

题面在编辑器里还有没保存的改动时,补样例先停手让你按 Ctrl+S,不会把你正写着的内容盖掉。

比赛模式

自己给自己一场有时间的比赛。

按 Ctrl+Alt+C,选时长:60 / 90 / 120 / 180 / 240 / 300 / 360 分钟,也可以自己填 1–600 的整数。 开始后状态栏出现倒计时,左侧 Olympia 面板的「当前环境」同步显示剩余时间。

题面、模板与离线

拉题面

  • 洛谷:Ctrl+Alt+P 后写 P1001,或粘链接
  • Codeforces:1660C / 1660/C
  • AtCoder:ABC300_A
  • Ctrl+Alt+V 从剪贴板识别题号,不用重打
  • 写完要交题:Ctrl+Alt+U 直接打开这道题的原网页——Olympia 按当前文件认题号, P1001.cpp 和 P1001.md 都算;手上没有对应的 .cpp 时,它会把缓存的题面列出来让你挑一道

题面库

按 Ctrl+Alt+O 打开:列表里是缓存过的每道题, 标题、来源、难度、时限、内存、样例组数都直接写在行上;最近拉的排最前面, 点过 ★ 收藏的那几道排在所有题之前。每行行末那颗 ★ 就地可点,点完立刻重排,不用退出去再进来。 按题号搜也按标题搜,打「并查集」就能找到 P3367;打「AC」只看做出来的,打「★」只看收藏的。 收藏存在工程的 .olympia/favorites.json 里,拷文件夹就带走。 左侧 Olympia 面板的「当前环境」里有一行 题面库:N 份,点它就是打开这个列表; 一份都还没有时这行会变成「还没拉过题面」,点进去直接开始拉。

手写的、或只抓了一半的题面也照样进库:读不出题号就用文件名当题号,不会把整份列表带崩。

做过的题带个勾。跑样例判成 AC 的那道题,在题面库列表里排成 ✓ P1001 A+B Problem,行上写着 已 AC(重做过就写 已 AC 2 次), 标题那行还会告诉你「缓存 12 道,已 AC 5 道」。想只看做出来的,直接敲 AC。 这份状态不是另存一遍,用的就是解题记录那条数据,所以换台机器只要工程在,勾还在。

集训清单

Ctrl+Alt+L 打开。一份清单就是一个起了名字的题目单: 名字(「CSP-J 模拟 3」)、题号(空格隔开直接写 P1001 P1002 P3367,从网页上整段复制来的、 中间夹着逗号换行也算)、以及这一场多少分钟。行上写着「2 题 · 已 AC 2」,做过的题带 ✓, 不用每次重新想今天还剩哪道。

选中一份,第一件事是开始这一场——计时器直接用清单上那个分钟数, 不用在 Ctrl+Alt+C 里再报一遍,AI 教练也照旧在这段时间不出场。 之后逐题点下去就是打开那道题的题面;还没拉过的,点一下就顺手去拉,回来题面已经在工程里了。

清单存在工程的 .olympia/practice.json 里,和题面同一个文件夹: 换到机房那台机器,打开同一个目录就还是那份单子。改单子不用重建:同一份菜单里就能 加一道题、移掉一道题、改时长、删掉这份清单,改完立刻回到这份单子看新的题数; 同名再建一次也是顶掉旧的,不会攒出两份「CSP-J 模拟 3」。移题和删单都只动这份单子, 题面文件和解题记录一份都不会跟着没。

自己加测试用例

题面就是那份可编辑的用例表。想要一个入口,点面板「题目与模板」里的 给这道题加一组自定义样例(命令面板里同名),挑一道题,Olympia 会在它的样例区末尾补一组空的 ### 样例 N 并把题面打开,你填完数据保存即可。

期望输出还空着的那组没法判,跑样例会把它们跳过并在日志里点名(样例 3 没填期望输出), 通过数只按填完的算,不会因为你没填而报一个 WA。

题面存成 Markdown 放在 olympia.problem.problemsDir(默认 .olympia/problems), 之后断网也能用 Ctrl+Alt+O 打开。

Codeforces 的题面网页有 Cloudflare 人机校验,抓不到正文时 Olympia 会留下题目信息和原题链接,并提示你在浏览器里看; 标题、标签、难度走官方接口,需要时把 olympia.problem.cfMetadata 打开(要多等几秒)。

模板与补全

Ctrl+Alt+T 插入起手代码,分 ACM 与 IOI 两套: 快读、freopen、常用头文件这些都在里面。

用不惯内置模板就写自己的那一份:面板 题目与模板 → 编辑我的模板,它打开的是工程里的 .olympia/template.cpp(第一次点会拿 ACM 模板给你打底)。改完保存就算数:之后插模板时「我的模板」排在第一个,按回车就是用你自己那份, 拉题面自动建的 .cpp 也从它打底。模板跟着文件夹走,拷到机房还是你那几行。 文件空着不算模板,不会往你代码里插一页空白。

写 C++ 时补全列表里还有一批竞赛常用写法:快速 IO、freopen、 lower_bound、小根堆、快速幂、并查集、埃氏筛、Dijkstra、BFS 等 20 条。 中英文都能搜到,敲 ios、fast、快速 都会命中同一条。 不想要就把 olympia.templates.cppSnippets 关掉。

拉完题面在题面旁边自动建一个同名 .cpp 的行为是关着的,想要就打开 olympia.problem.templateOnPull;已经有 .cpp 的题不会被覆盖。

哪些功能离线可用

  • 离线:编译、运行、体检、跑样例、对拍、比赛模式、模板、已缓存题面
  • 需要联网:拉在线题面、AI 教练

AI 教练(可选)

不绑账号、不订阅,也不经过我们的服务器。

配置

  1. 左侧 Olympia 面板 → AI 教练与帮助 → AI 设置(地址 / 密钥 / 模型)
  2. baseUrl 填 OpenAI 兼容服务的根地址(不含 /chat/completions)
  3. Key 在密码框里输入,存进本机加密存储(用你的 Windows 账户密钥加密的应用状态库),不写进任何配置文件;系统「凭据管理器」里不会有这个条目
  4. 模型列表默认从 {baseUrl}/models 自动拉取(缓存 5 分钟);拉不到就在 olympia.ai.models 里自己填

不填也能用 Olympia:编译、体检、跑样例、对拍全部不依赖 AI。

使用

聊天面板里输入 @coach,Olympia 会把当前文件的代码一起带上。三个内置指令:

  • /wa:结合题面、样例与你的输出,列出最可能的错因和验证方法
  • /hint:只给方向性提示与关键不变量,不输出完整代码
  • /check:提交前风险清单——边界、整数溢出、复杂度、读入终止、多组数据

命令面板里有 选择 AI 教练使用的模型 和 设置 AI 教练的 API Key;日志不在命令面板里,去底部面板的 Olympia AI Coach 那一栏看。

比赛模式进行中教练不出场,详见比赛模式。

快捷键全表

装完就能按。想改成自己的键位:「文件 → 首选项 → 键盘快捷方式」,搜 olympia。

操作键位说明
编译并运行F9按当前档位编译,通过后直接运行
编译当前文件Shift+F9只看有没有编译错误
按评测机编译Ctrl+Shift+F9强制 -O2,复现评测机
提交前体检Ctrl+Alt+Enter扫描会在评测机上编译失败的写法
跑样例Ctrl+Alt+J本地判定 AC / WA / RE / TLE / MLE
对比期望输出Ctrl+Alt+K把最近一次 WA 的那一组并排打开:左边期望、右边你的输出
对拍Ctrl+Alt+S随机数据比对正解与暴力
比赛模式Ctrl+Alt+C开始 / 结束倒计时
环境自检Ctrl+Alt+D逐项检查编译器、参数、AI 配置
Olympia 设置Ctrl+Alt+,一屏改完编译档位、对拍轮数、题面位置等全部开关
切换评测机档位点状态栏 洛谷 · C++23洛谷 / NOI / 自定义
拉取题面Ctrl+Alt+P洛谷、Codeforces、AtCoder
从剪贴板拉题号Ctrl+Alt+V复制网页链接后直接识别
打开题面库Ctrl+Alt+O离线,按题号或标题搜
题面进侧栏Ctrl+Alt+M把题面渲染在左栏:Markdown、公式、样例都在,代码区不受影响
打开原题网页Ctrl+Alt+U按当前文件认出这道题,去原题页交题、看数据范围
集训清单Ctrl+Alt+L一份命名题单,选它就能开一场
插入赛制模板Ctrl+Alt+TACM / IOI 起手代码

设置项一览

全部以 olympia. 开头,在设置里搜 olympia 会按「编译器与评测 / 题面与模板 / AI 教练」分组。

不用翻设置页:按 Ctrl+Alt+,(或点左侧 Olympia 面板的全部设置)打开 Olympia 设置,编译档位、跑样例的内存上限、对拍轮数、题面存放位置都在同一屏,每一项的说明就写在它下面, 改完立刻写进 settings.json。改过的项会标「已改」,一键退回默认。这一页是照着扩展清单生成的, 所以下面这张表里有的,页面上一定也有。

设置默认值作用
olympia.compiler.path空自己的 g++.exe;留空用内置工具链
olympia.compiler.profileluogu编译档位
olympia.compiler.customFlags空档位为 custom 时的附加参数
olympia.compiler.optimizationnone本地优化级别
olympia.compiler.showCompileCommandtrue打印完整编译命令
olympia.debug.showEntryPointsfalse把「运行」菜单里的调试入口项放回来(侧栏图标不会回来,包里也不带调试器)
olympia.check.enabledtrue提交前体检总开关
olympia.check.onSavetrue保存时真编一遍(g++ -fsyntax-only)
olympia.check.onBlockDonetrue写完一个部件就查结构:顶层花括号一闭合就用编辑器内置的语法解析报「少分号、括号不配对、写到一半断链」,不用保存、不启动编译器
olympia.check.rules.pragmaOptimizetrue检查优化属性
olympia.check.rules.reservedWordtrue检查 MSVC/GNU 关键字冲突
olympia.check.rules.removedCpptrue检查标准里已删除的写法
olympia.stress.rounds100对拍轮数
olympia.stress.timeoutMs2000对拍单程序运行上限
olympia.judge.memoryLimitMb0跑样例判 MLE 的内存上限,0 表示按题面里写的算
olympia.problem.problemsDir.olympia/problems题面缓存目录
olympia.problem.templateOnPullfalse拉完题面在题面旁建同名 .cpp,有「我的模板」先用它打底
olympia.problem.requestTimeoutMs15000拉题面的网络超时
olympia.problem.cfMetadatafalse额外查 Codeforces 标题/标签/难度
olympia.templates.cppSnippetstrueC++ 补全里带竞赛常用写法
olympia.train.recordSolvestrue跑样例判成 AC 就记一条解题记录
olympia.ai.baseUrl空OpenAI 兼容服务地址
olympia.ai.models空手填模型列表;留空则自动拉取

API Key 不在这张表里:它只存在系统密钥库,不出现在 settings.json,也不会被同步走。

装完之后容易卡的地方

双击安装被 SmartScreen 拦住

安装包没有代码签名证书,Windows 会拦一次。点「更多信息 → 仍要运行」即可; 不放心就先用 SHA256SUMS.txt 核对下载到的文件。

提示「安装程序需要下一张磁盘」

分卷没下全,或者文件没放在同一个目录。把 OlympiaSetup.exe 和它旁边 所有 OlympiaSetup-*.bin(分卷数量跟着包体大小变,别按个数找) 全放进同一个文件夹, 双击 OlympiaSetup.exe;文件名不要改。

F9 报找不到编译器

按 Ctrl+Alt+D 跑一次环境自检,会逐条告诉你它找了哪些路径。 内置工具链在安装目录的 resources\app\toolchain\mingw64\bin\g++.exe (用户版安装器默认在 %LocalAppData%\Programs\Olympia IDE); 想用系统里的编译器,填 olympia.compiler.path。

本地过了,交上去 WA / RE

先换档位:#include <bits/stdc++.h> 在 NOI 档(GCC 9.3.0 / C++14)下可能报错, 用 Ctrl+Shift+F9 打开 -O2 复现优化后的行为, 再用 Ctrl+Alt+S 对拍找一组反例。

体检报的问题我觉得不影响编译

体检只看会导致编译失败或评测机行为不一致的写法。确实误报时,可以按项关掉 olympia.check.rules.*,或整体关掉 olympia.check.onSave。

左侧栏没有「运行和调试」「源代码管理」,我要怎么用

竞赛用不到,出厂把它们从活动栏摘掉了。测试 与 测试结果 两个视图同样摘掉了 —— 这个产品里没有测试提供程序,点开只是一个空面板,判题走的是「跑样例」和「对拍」那两条路。

要说清楚的一点:olympia.debug.showEntryPoints 只把 「运行」菜单里的调试入口项 放回来,侧栏那个图标不会回来,安装包里也没有调试器(不随包 js-debug)。真需要单步调试, 得自己在扩展市场装一个调试扩展,机房没网就办不到。

版本管理同理:git 扩展根本没有进包,所以命令面板里搜不到 Git 命令, 「源代码管理」那一栏也就不是被隐藏了,而是确实没有东西可提供。要做版本管理, 要么在扩展市场装 git 扩展,要么直接用 git 命令行。

AI 教练不回话

先跑「环境自检」,它会检查 baseUrl 是否可达、Key 是否已保存; 再看底部「输出」面板里选 Olympia AI Coach 那一栏,请求返回了什么都在里面。地址填的是根地址,不要带 /chat/completions。

更新记录

安装包与功能变更记在这里。

v1.0.0(对应 VS Code 1.140.0)

开源与隐私

Olympia 的修改部分以 GPL-3.0-or-later 发布,源码在 GitHub; 它基于 Microsoft Visual Studio Code(MIT License)。 内置的 One Dark Pro 配色为 MIT(zhuangtongfa/material-theme), 捆绑的工具链来自 MinGW-w64 / MSYS2,各自遵循其原始许可证。

Olympia 不发送任何遥测数据(产品内置 enableTelemetry = false)。 细节见隐私声明,使用条件见使用条款。

把时间留给算法

装完,就打比赛。

下载 Olympia IDE v1.0.0