左侧 Olympia 面板
- 当前环境:编译器、编译配置、检查代码、题面库、解题记录、比赛剩余时间
- 编译与运行:编译并运行、编译当前文件、编译评测机版本、检查代码、运行样例、对比期望输出、开始对拍、开始比赛
- 题目与模板:拉取题面、拉取题号、打开题面库、打开原题网页、添加自定义样例、打开集训清单、插入赛制模板、编辑我的模板
- OlympiaAI 与帮助:OlympiaAI 设置(地址 / 密钥 / 模型)、打开设置、检查环境、打开官网与文档、查看许可证
使用手册 · 对应 Olympia v1.1.0
Olympia 是面向信息学竞赛的 Windows 桌面 IDE,基于 VS Code 开发。本手册介绍 Olympia 自带的功能: 编译器与编译配置、提交前检查、跑样例、对拍、比赛模式、题面与模板、OlympiaAI, 以及安装后常见问题的处理方式。编辑器本身的操作与 VS Code 一致。
装完到第一次运行,正常只需要这三步。
.cpp 的目录。内置 g++ 15.2.0 会被自动找到,不需要配 PATH。首次启动时左侧「竞赛工具」面板会自动展开,显示编译器、编译配置与可用快捷键。 欢迎页提供十步引导,每一步可直接执行对应操作,完成后自动标记。
常用操作集中在以下三个位置。
状态栏左侧三项:编译配置、编译运行、提交前检查结果,点击即可执行。 比赛开始后此处显示倒计时。
当前文件右上角放了最常用的六个动作:编译并运行、编译当前文件、按评测机编译、提交前检查、拉取题面、插入赛制模板。
菜单栏 帮助 里留下的几项都指向这个产品自己的东西:文档、发行说明、许可证文本, 以及 报告问题——前两项就是本套文档的这个站点。 调试器、源代码管理这些竞赛用不到的入口默认从侧栏摘掉了。
本地能过、交上去挂,多数是编译参数不一样。Olympia 直接把评测机的开关拿来用。
洛谷、NOI Linux 2.0、自定义三种编译配置。
点状态栏的 洛谷 · C++23,或者使用「选择编译配置」命令。
三个编译动作和它们的键位:
-O2,用来复现评测机行为)默认不在本地开启优化,便于对照行号;可打印完整编译命令。若系统已有编译器,可在设置中指定路径。
保存时自动扫描可能在评测机上编译失败的写法;检查项与对应设置见页末技术注脚。
也可按 Ctrl+Alt+Enter 主动检查一次,结果显示在「问题」面板,不弹窗、不打断输入。
把题面样例当测试用,不联网、不需要账号。
结果给出 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 面板的「当前环境」同步显示剩余时间。
P1001,或粘链接1660C / 1660/CABC300_AP1001.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 的题不会被覆盖。
不绑账号、不订阅,也不经过我们的服务器。
不填也能用 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+T | ACM / IOI 起手代码 |
全部以 olympia. 开头,在设置中搜索 Olympia 会按分组显示。
不用翻设置页:按 Ctrl+Alt+,(或点左侧 Olympia 面板的全部设置)打开 Olympia 设置,编译配置、跑样例的内存上限、对拍轮数、题面存放位置都在同一屏,每一项的说明就写在它下面, 改完立刻生效。已修改项会标记「已改」,可恢复默认。
| 设置 | 默认值 | 作用 |
|---|---|---|
olympia.compiler.path | 空 | 自己的 g++.exe;留空用内置工具链 |
olympia.compiler.profile | luogu | 编译配置 |
olympia.compiler.customFlags | 空 | 编译配置为 custom 时的附加参数 |
olympia.compiler.optimization | none | 本地优化级别 |
olympia.compiler.showCompileCommand | true | 打印完整编译命令 |
olympia.check.enabled | true | 提交前检查总开关 |
olympia.check.onSave | true | 保存时真编一遍(g++ -fsyntax-only) |
olympia.check.onBlockDone | true | 写完一个部件就查结构:顶层花括号一闭合就用编辑器内置的语法解析报「少分号、括号不配对、写到一半断链」,不用保存、不启动编译器 |
olympia.check.rules.pragmaOptimize | true | 检查优化属性 |
olympia.check.rules.reservedWord | true | 检查 MSVC/GNU 关键字冲突 |
olympia.check.rules.removedCpp | true | 检查标准里已删除的写法 |
olympia.stress.rounds | 100 | 对拍轮数 |
olympia.stress.timeoutMs | 2000 | 对拍单程序运行上限 |
olympia.judge.memoryLimitMb | 0 | 跑样例判 MLE 的内存上限,0 表示按题面里写的算 |
olympia.problem.problemsDir | .olympia/problems | 题面缓存目录 |
olympia.problem.templateOnPull | false | 拉完题面在题面旁建同名 .cpp,有「我的模板」先用它打底 |
olympia.problem.requestTimeoutMs | 15000 | 拉题面的网络超时 |
olympia.problem.cfMetadata | false | 额外查 Codeforces 标题/标签/难度 |
olympia.templates.cppSnippets | true | C++ 补全里带竞赛常用写法 |
olympia.train.recordSolves | true | 跑样例判成 AC 就记一条解题记录 |
olympia.ai.baseUrl | 空 | OpenAI 兼容服务地址 |
olympia.ai.models | 空 | 手填模型列表;留空则自动拉取 |
olympia.ai.thinking | 折叠显示 | 思考过程的显示方式:折叠显示 / 始终展开 / 不显示 |
API 密钥不在这张表里:它只存在系统密钥库,不出现在 settings.json,也不会被同步走。
安装包没有代码签名证书,Windows 会拦一次。点「更多信息」再点「仍要运行」即可; 下载页提供文件校验值,可自行核对下载到的文件。
分卷没下全,或者文件没放在同一个目录。把 OlympiaSetup.exe 和它旁边
全部 OlympiaSetup-*.bin(分卷数量随安装包大小变化)
全放进同一个文件夹,
双击 OlympiaSetup.exe;文件名不要改。
按 Ctrl+Alt+D 跑一次环境自检,会逐条说明它查找了哪些位置。 想使用系统里已安装的编译器,可在设置中指定路径。
先换编译配置:#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」查看,请求返回的信息都在里面。服务地址填写根地址,不要带 /chat/completions。
安装包与功能变更记在这里。
以下为历史版本记录,保留发布时的原文表述。
AC 就只看做出来的。这份状态没有另存一遍,用的就是解题记录,所以工程走到哪,勾跟到哪.olympia/solves.json,
面板上常驻一行「N 题 · 连续 D 天 · 今日 x 题」;这是老版本就有的东西,换机器也不用重新攒.olympia/template.cpp,改完保存就是下一次
Ctrl+Alt+T 插入的那一份,拉题面自动建的 .cpp 同样以它为基础。
同样是老版本有、这一版之前只有内置模板的地方.olympia/practice.json。
Ctrl+Alt+L 打开,选择后「开始本场」——倒计时直接用清单上的分钟数,不再多问一次;
逐题点下去打开题面,没拉过的顺手去拉;行上的「已 AC x」和那个勾用的就是解题记录,没有第二份状态。
修改清单可在同一菜单完成:添加题目、移除题目、改时长、删掉这一份,不用先删再建tasks.json 领。
同一处清理还有:测试 与 测试结果 两个视图容器(本产品没有测试提供程序,点开是一个空面板,
连「打开视图」列表里那条也会一起消失),以及命令面板里的管理帐户(BYOK 产品没有托管账号,
账户按钮出厂就是关的,那条只会打开一个空列表)bold 时右侧写着「插入加粗文本」,
不再是 Insert bold text)、引用与类型视图的命令、设置页里剩下的英文说明,现在都是中文。
这件事由脚本守着:check-extension-copy.mjs 把随包的每个扩展清单读一遍,凡是学生读得到的位置
(面板标题、命令名、设置说明、补全说明)里出现英文句子就点名,所以以后新加一条命令忘了翻译,
会在跑检查时被抓住,而不是等学生在命令面板里撞见。学生进不去的字段(模型工具参数、笔记本渲染器那类)
刻意留着英文——翻了也看不到,只会在每次跟上游同步时多几处冲突Olympia 的修改部分以 GPL-3.0-or-later 发布,源码在 GitHub; 它基于 Microsoft Visual Studio Code(MIT License)。 内置的 One Dark Pro 配色为 MIT(zhuangtongfa/material-theme), 捆绑的工具链来自 MinGW-w64 / MSYS2,各自遵循其原始许可证。
编译配置:洛谷: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