如何安装信奥赛考场模拟考试环境
- 2026-10-22 10:04:04
孩子们马上要去参加 CSP-J/S 复赛。
信奥赛的上机环境,NOI 官网发布 NOI Linux 2.0(Ubuntu-NOI 2.0 版),基于 Ubuntu 20.04.1 定制完成。按 NOI 科学委员会决议,它自 2021 年 9 月 1 日起,作为 NOI 系列比赛和 CSP-J/S 等活动的标准环境使用。
也就是说,孩子比赛那天面对的,是一台装了 Linux 的电脑。
一、那台电脑,长什么样
开机之后,屏幕上没有“开始”菜单,没有 C 盘 D 盘,没有桌面上一堆 exe 图标。左边一列是文件、浏览器、终端,右上角是时间、输入法、音量和关机。
选手要用的是:一个文件管理器、一个终端、几个编辑器。
它只是一个工具,工具的任务只有一个:把你的代码编译成一个能跑的程序。
而这个“编译”的活儿,由系统里固定的那套编译器完成。
这也是我们平时一定要学原版编译器的原因,不要用删减版。
二、里面到底装了什么
官方公布的系统情况简表,我按用途重新归了一下类:
编译与语言环境
集成开发环境
调试工具
文本编辑器
其他
这份清单最值得注意的,不是“装了多少”,而是版本号是钉死的。
GCC 9.3.0。这个数字意味着:C++11 和 C++14 可以放心用,C++17 只有一部分可用;也意味着,某些在老家那台陈旧 Dev-C++ 里“能过”的写法,在这里会直接编译报错。
三、五个最容易翻车的习惯
我把这些年见过的“考场翻车”归成五类,几乎每年都在重演。
第一,%I64d。
这是 Windows 下 MSVC 的写法。GCC 只认 %lld,或者干脆用 cin / cout。一道题一个 long long,输出格式错了,答案判错,分数就没了。
第二,conio.h 和 system("pause")。
#include <conio.h>、getch() 是 Windows 独有的。Linux 上没有这个头文件,编译直接报错。
而 system("pause") ——它不报错,只是会在输出里多出一行 sh: 1: pause: not found。
第三,gets 这类老写法。
gets 从 C++14 起就被移除了。用 GCC 9.3 编译,它会告诉你这个函数不存在。同理,一些只在小熊猫、老 Dev-C++ 里成立的“方言”,在这里都不作数。
第四,文件名的大小写。
Windows 不区分大小写,Linux 区分。题目要求读 poker.in,孩子写成 freopen("Poker.in", "r", stdin),本地一点事没有——考场上直接“文件不存在”,程序读完空数据,输出为空,零分。这一条,年年有人栽。
第五,路径里的反斜杠。
Linux 的路径分隔符是 /,反斜杠 \ 在 Linux 里是转义符。freopen("D:\\data\\a.in", ...) 这种写法,在考场上必然失败:既没有 D 盘,也没有两个反斜杠这回事。
顺带说一句隐形的坑:大数组开在函数里,是放在栈上的。Linux 默认栈空间大约 8 MB,一个 int a[1000000] 就是 4 MB,再来两个就段错误。习惯性把大数组开到全局,这个动作要在家里就练成肌肉记忆。
四、在家装一套和考场一样的
说了这么多,最有效的办法其实很朴素:让孩子在自己电脑上,装一套一模一样的环境,跑两周。
用虚拟机就行,不破坏原有的 Windows。下面是完整过程,四张图都是我安装时截的。
第一步:备好两个文件。
一是虚拟机软件,VMware Workstation 17 Player,官方提供个人非商业使用的免费版本。二是 NOI Linux 2.0 的镜像,在 NOI 官网的下载入口获取。
⚠️ 官方在下载说明里特意写了一句话:安装系统时请断开网络。 装完再联网。
第二步:新建虚拟机。
选择“稍后安装操作系统”,类型选 Linux,版本选 Ubuntu 64 位。磁盘建议 20 GB 以上,选择“将虚拟磁盘存储为单个文件”。最后进入“自定义硬件”,把 CD/DVD 指向刚下载的 ISO。
第三步:开机,先等它自检。
虚拟机启动后,第一个画面是黑底白字:

Checking disks: 15% complete,下面写着正在检查 /casper/filesystem.squashfs。这一步是校验安装镜像有没有损坏,需要几分钟,不要按 Ctrl+C 跳过。等它跑完,才会进入安装向导。
屏幕下方那行 customized for noi,是这套系统的身份证明。
第四步:安装向导,有一页不用改。
Ubuntu 的安装程序会先讲一页“Access for everyone”,介绍系统的无障碍理念:外观、辅助技术、语言支持。这一页对比赛没有影响,直接往后走。

注意窗口底部那行 Configuring hardware...——安装程序在后台配置硬件,进度条会自己往前走。这个阶段不要关窗口、不要强行重启虚拟机。
第五步:设置用户名,千万别填 admin。
接下来的“Who are you?”是整套流程里唯一容易卡住的地方。

我第一次图省事,姓名填 admin,机器名填 admin-virtual-machine,用户名也填 admin。结果红字立刻跳出来:The username you entered (admin) is reserved for use by the system. Please select a different one.
admin 是系统保留名。换成别的就行——我用的是 tree,机器名 tree-virtual-machine。

右边出现绿勾就说明格式通过了。密码强度提示 Fair password 也可以继续,不必强求。下面记得选 Require my password to log in(登录时需要密码),不要勾自动登录——考场的机器也是要登录的。
这几项填完,底部变成 Copying files...,安装进入最后阶段。
第六步:等进度条走完,重启,取出 ISO。
重启前把虚拟机的 CD/DVD 断开(或在设置里去掉 ISO),否则会又从安装盘启动。
关于配置,我给一个自己的经验值,不是官方规定:内存 4 GB、处理器 2 核以上、磁盘 20 GB 起。这套系统本身不重,虚拟机跑起来和真机手感差别不大。
五、装好之后,做这五件事
装完不等于会用。我给孩子的要求是五件事,全部做完,才算“报到”:
一,念出编译器版本。 打开终端,输入 g++ --version,看到 9.3.0 这个数字,和考场对上了。
二,手写一次文件读写。 写一个读 a.in、输出 a.out 的程序,用一行命令编译:
g++ -std=c++14 -O2 -o a a.cpp
然后 ./a.out 运行,用文本编辑器打开 a.out 看看内容对不对。这个动作,比刷十道题更能救命。
三,建好四个文件夹。 习惯用题目名建目录,a、b、c、d 各放一个模板文件。考场上省下的每一分钟,都是分数。
四,用 Arbiter-local 跑一遍。 系统自带的单机评测工具。把程序和标准答案丢进去,让它判一次。孩子第一次看到“Accepted”,比老师说十遍都有用。
五,在 Code::Blocks 里手打一遍。 新建项目、写代码、F9 编译运行。重点确认两件事:中文注释不乱码,编译窗口报的错看得懂。
六、家长最常问的几个问题
一定要会 Linux 命令吗?
不需要。考场上绝大多数操作是鼠标完成的。真正常用的命令只有两三条:cd 进目录、ls 看文件、./a.out 运行程序。会这三条,就够用了。
家里是 Mac 怎么办?
NOI Linux 面向 x86 电脑。苹果芯片的 Mac 上跑这套镜像需要额外折腾虚拟机配置,稳定性也难保证。我的建议是借一台 Windows 笔记本练,别在环境上耗掉孩子的兴趣。
这届考的就是这个版本吗?
标准环境由 NOI 科学委员会决定,但具体到某一届、某一省是否另有安排,仍以当届 CCF 与各省组织单位的通知为准。开赛前,务必再看一眼官方通知。
虚拟机卡不卡,要不要换电脑?
不用换。一台能装虚拟机的普通笔记本就足够,给足内存就行。
说到底,这是一场“习惯赛”
很多家长把信奥赛当“智力赛”,我的观察是:它有一半是“习惯赛”。
同一道题,两个水平相当的孩子,一个开机可能有点不知所措、找不到编译器在哪,一个坐下就能写 freopen、知道文件名必须一字不差——差的那几分,不在算法,在准备。
装环境看起来和“学算法”毫无关系。但它换来的是:比赛那天,孩子把全部注意力都留给题目本身。
这大概是性价比最高的一次练习。
写在最后 · 怎么找到我
JOIN US · 联系我
既然看到这里了,如果你也想让孩子试试信息学,或者想聊聊学编程该怎么规划,欢迎来认识我。
最直接的方式,是通过我的个人网站:
🔗 刘姝编程工作室官网
https://liushu-coding-studio.netlify.app/
我在上面整理了教学理念、课程方向,还有我的获奖资质情况:
如果你在孩子装环境的过程中卡在了某一步,欢迎在评论区留下“卡关位置”,我看到会尽量帮你排雷。觉得这篇有用,也记得点个赞和在看,转给那个即将进考场的孩子。