Olympia IDE

使用手册 · 对应 Olympia v1.1.0

每一件事在哪里点

Olympia 是面向信息学竞赛的 Windows 桌面 IDE,基于 VS Code 开发。本手册介绍 Olympia 自带的功能: 编译器与编译配置、提交前检查、跑样例、对拍、比赛模式、题面与模板、OlympiaAI, 以及安装后常见问题的处理方式。编辑器本身的操作与 VS Code 一致。

可直接查看十分钟上手或快捷键全表。

十分钟上手

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

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

首次启动时左侧「竞赛工具」面板会自动展开,显示编译器、编译配置与可用快捷键。 欢迎页提供十步引导,每一步可直接执行对应操作,完成后自动标记。

功能放在哪里

常用操作集中在以下三个位置。

左侧 Olympia 面板

  • 当前环境:编译器、编译配置、检查代码、题面库、解题记录、比赛剩余时间
  • 编译与运行:编译并运行、编译当前文件、编译评测机版本、检查代码、运行样例、对比期望输出、开始对拍、开始比赛
  • 题目与模板:拉取题面、拉取题号、打开题面库、打开原题网页、添加自定义样例、打开集训清单、插入赛制模板、编辑我的模板
  • OlympiaAI 与帮助:OlympiaAI 设置(地址 / 密钥 / 模型)、打开设置、检查环境、打开官网与文档、查看许可证

底部状态栏

状态栏左侧三项:编译配置、编译运行、提交前检查结果,点击即可执行。 比赛开始后此处显示倒计时。

编辑器标题栏

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

帮助菜单

菜单栏 帮助 里留下的几项都指向这个产品自己的东西:文档、发行说明、许可证文本, 以及 报告问题——前两项就是本套文档的这个站点。 调试器、源代码管理这些竞赛用不到的入口默认从侧栏摘掉了。

编译配置与评测

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

三套编译配置预设

洛谷、NOI Linux 2.0、自定义三种编译配置。

怎么切

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

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

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

默认不在本地开启优化,便于对照行号;可打印完整编译命令。若系统已有编译器,可在设置中指定路径。

提交前检查

保存时自动扫描可能在评测机上编译失败的写法;检查项与对应设置见页末技术注脚。

也可按 Ctrl+Alt+Enter 主动检查一次,结果显示在「问题」面板,不弹窗、不打断输入。

跑样例(本地判 AC / WA)

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

  1. 先用 Ctrl+Alt+P 拉题面,或 Ctrl+Alt+O 打开一份已经缓存的题面。
  2. 写好代码,按 Ctrl+Alt+J。
  3. Olympia 用当前编译配置编译,按题面样例数据比对输出,并依据题面时限与内存限制判定。

结果给出 AC / WA / RE / TLE / MLE。判成 WA 时日志会说明错在哪: 第几行、第几个数或第几个词不同(期望多少、得到多少),或者「只输出了前 N 行」「多了 N 行」 「每行都有、只是顺序不同」「程序没有任何输出」;再按 Ctrl+Alt+K (或点通知里的 对比期望输出)可用并排差异视图对照期望输出与你的输出, 无需抄写题面,也不会在工程里生成临时文件。每组还会显示耗时与峰值内存,超内存时按「峰值 > 上限」判 MLE。

读不到题面或题面中没有样例时,会先让你选一份缓存题面,不会凭空判错。时限识别「时限:1000ms」「时限:1 秒」等写法, 内存识别「内存限制:128.00 MB」「内存:128M」「内存:1GB」等写法。

判成 AC 时会在工程里记录一条解题记录:左侧 Olympia 面板「当前环境」中的 「解题记录 N 题 · 连续 D 天 · 今日 x 题」即来自它,点开可按题号搜索并打开对应题面。记录随文件夹保存,更换设备后仍在。

对拍

正解和暴力互相验证。

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

轮数默认 100 轮,单个程序的运行上限默认 2000 ms,超出上限按不一致处理。

生成器出错不弹框,那一轮直接跳过并继续;详细信息见输出面板。

抓到不一致时,提示里有 补进题面样例:选择该项后,该组数据与正解输出会写入对应题面, 成为永久的一组样例,之后每次跑样例都会带上它。题面是普通文本,也可直接在样例区手工补一组。

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

题面在编辑器中还有未保存的改动时,补样例会先等待保存,不会覆盖正在编写的内容。

比赛模式

开始一场限时比赛。

按 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 打开:列表中是已缓存的每道题, 标题、来源、难度、时限、内存、样例组数都直接写在行上;最近拉取的排在最前, 收藏的题排在所有题之前。每行行末的星标可就地点击,点击后立即重排,无需退出重进。 可按题号或标题搜索;输入「AC」只看已做出来的,输入收藏符号只看收藏的。 收藏保存在工程目录内,可随工程迁移。 左侧 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 里再报一遍,OlympiaAI 也照旧在这段时间暂停使用。 之后逐题点下去就是打开那道题的题面;还没拉过的,点一下就顺手去拉,回来题面已经在工程里了。

清单保存在工程目录内,和题面同一个文件夹:换到另一台机器,打开同一个目录仍是该清单。 修改清单无需重建:同一份菜单中即可 添加题目、移除题目、改时长、删除本清单, 改完立刻回到本清单查看新的题数;同名清单将被覆盖,不会出现两份「CSP-J 模拟 3」。 移除题目和删除清单都只影响本清单,题面文件与解题记录均不受影响。

自己加测试用例

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

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

题面以 Markdown 保存在工程目录内,之后断网也能用 Ctrl+Alt+O 打开。

Codeforces 的题面网页有人机校验,抓不到正文时会保留题目信息与原题链接,并提示在浏览器中查看; 标题、标签、难度走官方接口,需要在设置中开启额外查询(会多等几秒)。

模板与补全

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

如需使用自己的模板:面板 题目与模板 中的 编辑我的模板,打开的就是工程内的模板文件(首次点击以内置 ACM 模板为基础)。 改完保存即生效:之后插入模板时「我的模板」排在第一个,按回车即使用自己那份, 拉题面自动创建的 .cpp 同样以它为基础。模板随文件夹保存,换到另一台机器仍是同样的内容。 文件为空时不算模板,不会插入空白内容。

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

拉完题面时自动在题面旁创建同名 .cpp 的行为默认关闭,需要时可在设置中开启;已经有 .cpp 的题不会被覆盖。

哪些功能离线可用

  • 离线:编译、运行、提交前检查、跑样例、对拍、比赛模式、模板、已缓存题面
  • 需要联网:拉取在线题面、OlympiaAI

OlympiaAI(可选)

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

配置

  1. 左侧 Olympia 面板中,进 OlympiaAI 与帮助,选 OlympiaAI 设置
  2. 填写服务地址与 API 密钥
  3. 回到聊天面板,直接输入问题即可

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

使用

聊天面板里直接输入问题即可,Olympia 会把当前文件的代码一起带上。三个内置指令:

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

命令面板中有 选择 OlympiaAI 使用的模型 与 设置 OlympiaAI 的 API 密钥;日志可在输出面板中选择「OlympiaAI」查看。

比赛模式进行中 OlympiaAI 暂停使用,详见比赛模式。

快捷键全表

安装后即可使用。如需调整键位:「文件 > 首选项 > 键盘快捷方式」,搜索 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逐项检查编译器、参数与 OlympiaAI 配置
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 会按分组显示。

不用翻设置页:按 Ctrl+Alt+,(或点左侧 Olympia 面板的全部设置)打开 Olympia 设置,编译配置、跑样例的内存上限、对拍轮数、题面存放位置都在同一屏,每一项的说明就写在它下面, 改完立刻生效。已修改项会标记「已改」,可恢复默认。

设置默认值作用
olympia.compiler.path空自己的 g++.exe;留空用内置工具链
olympia.compiler.profileluogu编译配置
olympia.compiler.customFlags空编译配置为 custom 时的附加参数
olympia.compiler.optimizationnone本地优化级别
olympia.compiler.showCompileCommandtrue打印完整编译命令
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空手填模型列表;留空则自动拉取
olympia.ai.thinking折叠显示思考过程的显示方式:折叠显示 / 始终展开 / 不显示

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

安装后容易卡的地方

双击安装被 SmartScreen 拦住

安装包没有代码签名证书,Windows 会拦一次。点「更多信息」再点「仍要运行」即可; 下载页提供文件校验值,可自行核对下载到的文件。

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

分卷没下全,或者文件没放在同一个目录。把 OlympiaSetup.exe 和它旁边 全部 OlympiaSetup-*.bin(分卷数量随安装包大小变化) 全放进同一个文件夹, 双击 OlympiaSetup.exe;文件名不要改。

F9 报找不到编译器

按 Ctrl+Alt+D 跑一次环境自检,会逐条说明它查找了哪些位置。 想使用系统里已安装的编译器,可在设置中指定路径。

本地过了,交上去 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。

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

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

要说清楚的一点:这个产品不带调试器,也没有「把调试侧栏放回来」的开关;确需单步调试,需自行安装调试扩展,离线环境无法完成。

版本管理同理:git 扩展没有进包,因此命令面板中搜不到 Git 命令,「源代码管理」一栏也不是被隐藏,而是确实没有内容可提供。 需要版本管理时,请在扩展市场安装 git 扩展。

OlympiaAI 不回话

先跑「环境自检」,它会检查服务地址是否可达、密钥是否已保存; 再看输出面板中选择「OlympiaAI」查看,请求返回的信息都在里面。服务地址填写根地址,不要带 /chat/completions。

更新记录

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

v1.1.0(Lampadedromia)

v1.0.2

v1.0.1(对应 VS Code 1.140.0)

以下为历史版本记录,保留发布时的原文表述。

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 默认不发送任何遥测数据。 细节见隐私声明,使用条件见使用条款。

技术注脚

编译配置:洛谷: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。

编译行为:默认优化级别为 none(设置项 olympia.compiler.optimization),本地调试保持不优化,报错信息才对得上行号。完整命令行可在输出面板「编译」中查看,可用 olympia.compiler.showCompileCommand 关闭打印。编译器路径用 olympia.compiler.path 指定;留空时优先使用内置工具链,其次查找 PATH。

提交前检查项:#pragma GCC optimize 与 __attribute__((optimize))(评测机改过 GCC,这类优化属性行为不同,常见 RE 或答案错误);asm、and、or、not、xor 用作变量名(GNU C++ 中是关键字);gets、random_shuffle、register(C++17 起标准已删除)。对应设置 olympia.check.rules.pragmaOptimize、olympia.check.rules.reservedWord、olympia.check.rules.removedCpp;总开关 olympia.check.enabled。

两种触发:olympia.check.onBlockDone 是写完一个部件就用编辑器内置的语法解析查结构(毫秒级,不启动编译器,因此不会说「编译通过」);olympia.check.onSave 是真正编译一遍(g++ -fsyntax-only),「编译不过」由它判定。检查不会修改代码,也不会自行弹窗。

判题:峰值内存为运行期采样(间隔 30 毫秒),短命进程可能漏掉峰值,因此该数值只会偏小不会偏大——判 MLE 表示确实超限,未判不代表一定安全。题面未写内存限制时只报峰值、不判 MLE;可在 olympia.judge.memoryLimitMb 强制上限。代码文件名与题面不一致时(例如 test.cpp 对应 P1001),首次会询问使用哪道题的样例,之后同一文件不再询问(通知中有「换一道题」);题面缓存目录为 olympia.problem.problemsDir(默认 .olympia/problems),题面被删除时自动回到选择列表。解题记录保存在 .olympia/solves.json,可由 olympia.train.recordSolves 关闭,已有记录不受影响。

对拍:对拍无需安装 Python,也不必手写 fc 脚本。反例写入工作区的 stress-fail/,命名形如 round-7.*,同名时顺延为 round-7-2.*。轮数由 olympia.stress.rounds 控制(默认 100),单程序运行上限由 olympia.stress.timeoutMs 控制(默认 2000 ms)。题面样例区标题为 ## 样例数据,一组样例形如 ### 样例 3。

题面与收藏:收藏保存在 .olympia/favorites.json;集训清单保存在 .olympia/practice.json;Codeforces 的标题、标签、难度需开启 olympia.problem.cfMetadata。

模板与补全:个人模板文件为 .olympia/template.cpp;补全项由 olympia.templates.cppSnippets 控制;拉题面自动建同名 .cpp 由 olympia.problem.templateOnPull 控制。

OlympiaAI:olympia.ai.baseUrl 填 OpenAI 兼容服务的根地址(不含 /chat/completions);密钥保存在本机加密存储中,不写入任何配置文件;模型列表默认从 {baseUrl}/models 自动拉取(缓存 5 分钟),拉取不到可在 olympia.ai.models 中手动填写。

安装:安装包未使用代码签名证书。安装器为分卷形式,须将 OlympiaSetup.exe 与其旁的全部 OlympiaSetup-*.bin 放在同一目录,文件名不要修改。

排错:内置工具链位于安装目录的 resources\app\toolchain\mingw64\bin\g++.exe(用户版安装器默认装在 %LocalAppData%\Programs\Olympia IDE);下载页的校验文件名为 SHA256SUMS.txt。

遥测:产品内置 enableTelemetry = false。

把时间留给算法

装完,就打比赛。

下载 Olympia IDE v1.1.0