其他分享
首页 > 其他分享> > NOI 系列赛常见技术问题整理

NOI 系列赛常见技术问题整理

作者:互联网

前言

\(2021\) 年 \(9\) 月 \(1\) 日起,全新的 NOI Linux 2 正式替代了旧版 NOI Linux,成为 NOI 系列赛的官方比赛环境。

免责声明

系统配置情况

NOI Linux 2.0 是基于 Ubuntu 20.04 LTS 改造而成的系统,为 \(64\) 位系统。

系统内自带 g++ 编译器,版本 \(9.3.0\)(编译时如果未指明语言标准,默认采用 C++14 标准),另外有 Python \(2.7\) 和 \(3.8\),虽然 Python 并非竞赛语言,但可以使用 Python 编写一些辅助性程序(如数据生成器,对拍器等)。

IDE 有 Code::Blocks,Geany。

编辑器有 VS Code(安装了 C++ 扩展,但组件不完整,另外无简体中文翻译包),Vim,Emacs,gedit,Sublime Text \(3\) 等。

NOI 技术规范摘抄

将现有的技术规范简单整理后做了份简明,方便理解的版本。

请仔细阅读并理解这部分内容后,再阅读下面的部分。不清楚这部分的内容导致的盲目提问可能会给您带来不必要的尴尬。

我能使用...吗?

比赛系统的使用

考虑到有不少选手不熟悉 Linux 系统,还有不少地方仍然使用 Windows 作为比赛环境,因此特开辟一个板块,讲解 Linux 与 Windows 的相关使用技巧。

有关 Linux 和 Windows 下命令行使用的相关技巧,OI Wiki 讲述得非常详细,这里主要是介绍命令行使用以外的一些注意事项。

更改栈空间

一般来说,评测时的栈空间限制等于内存限制。但系统默认的栈空间往往较小,有时会出现官方评测时正常运行,而本地测试时爆栈的情况。这时候就需要对栈空间进行更改。

在 Linux 系统下,由 ulimit 对程序使用的资源进行限制。

输入 ulimit -s <num> 可以将栈空间更改为 \(\text{num}\) KiB(如 ulimit -s 262144 可以将栈空间改为 \(256\) MiB),ulimit -s unlimited 可以将栈空间改为无限制。ulimit -a 可以查看各项资源的限制情况。

需要注意的是,ulimit 对包括栈空间在内的资源限制的配置仅在 当前终端 下有效。

对于 Windows 系统,栈空间在程序编译时确定,准确来说,由连接器来处理栈空间的大小问题。在编译时传入如下参数 -Wl,--stack= 可以将栈大小改为 num Byte(如 -Wl,--stack=268435456 将栈空间确定为 \(256\) MiB)。

查看样例文件

一般情况下,考场下发的样例文件是 Linux 格式的(换行为 \n),而 Windows 下的换行为 \r\n,因此如果用记事本打开的话,因为无法正确识别换行的原因,样例会无法正常显示(可能表现为无换行,换行符被黑矩形代替等)。

使用 VS Code 等高级编辑器可以有效解决这一问题(还能实现换行格式的转换)。当然如果没有提供 VS Code 的话,也可以用系统自带的写字板。

当然这只是解决了显示问题,如果你尝试在写字板打开文件后,将输入直接复制到命令行,你可能会发现还是不能正常读入。正确的方法是在代码中添加重定向/文件流,或者在命令行中使用管道。

参考资料

本文搬运自别人持续更新的文章留作自用,如有更新请提醒一下。

标签:11,NOI,Linux,系列赛,常见,C++,编译,使用
来源: https://www.cnblogs.com/AFewMoon/p/15411926.html