常见问题及解答
NFLSOJ 的测评环境是什么?
评测机的操作系统是 Ubuntu Linux 14.04 LTS x64。
C++ 的编译器是 g++ 7.2.0,编译命令:g++ code.cpp -std=c++03 -o code -lm -O2 -DONLINE_JUDGE
。如果选择 C++11,-std=c++03
会变为 -std=c++11
;C++14 和 C++17 类似。
C 的编译器是 gcc 7.2.0,编译命令:gcc code.c -std=c90 -o code -lm -O2 -DONLINE_JUDGE
。如果选择 C11,-std=c90
会变为 -std=c11
。
Pascal 的编译器是 fpc 2.6.2,编译命令:fpc code.pas -O2
。
Java7 的 JDK 版本是 jdk-7u80,编译命令:javac code.java
。
Java8 的 JDK 版本是 jdk-8u144,编译命令:javac code.java
。
Python 会先编译为优化过的字节码 .pyo 文件。支持的 Python 版本分别为 2.7.6 和 3.4.3。
FreeBASIC 的编译器版本是 fbc 1.05.0,编译命令:fbc -b code.bas -x code -O 2 -d ONLINE_JUDGE
。
NFLSOJ 如何上传头像?
NFLSOJ 目前暂时不提供头像存储服务。你可以使用 Gravatar。Gravatar 是一个全球的头像存储服务。在 Gravatar 上传头像后,你的头像将会与你的电子邮箱绑定,可以在不同的网站上使用。支持 Gravatar 的网站包括各种 Wordpress 网站和许多 OJ,比如 UOJ 和 vjudge。在这些网站上,只要你的电子邮箱填对了,那么你的头像也就能立刻显示了。
Gravatar 地址:https://cn.gravatar.com/
各种评测状态是什么意思?
Accepted | 答案正确。恭喜你通过了这道题。 |
Wrong Answer | 答案错误。仅仅通过样例数据的测试并不一定是正确答案,一定还有你没想到的地方。 |
Runtime Error | 运行时错误。像非法的内存访问,数组越界,调用禁用的系统函数都可能出现这类问题,请点击评测详情获得输出。 |
Time Limit Exceeded | 时间超限。请检查程序是否有死循环,或者应该有更快的算法。 |
Memory Limit Exceeded | 内存超限。数组开太大了,或者可能有内存泄露。 |
Output Limit Exceeded | 输出超限。你的输出居然比正确答案长了两倍! |
Dangerous Syscalls | 危险系统调用。如果该语言支持正确,你可能忘删了文件输入输出,或者想要 hack OJ。 |
Judgement Failed | 评测失败。多半是出题人或者 OJ 管理员的锅。 |
No Comment | 没有评论。评测机对您的程序无话可说。 |
各种赛制有什么不同?
NFLSOJ 的赛制与真实的赛制基本一致,也许有一些细微的差异。
不同的赛制决定了选手是否有以下权限:
NFLSOJ 有栈空间限制吗?
没有特别的限制。准确来说,栈空间限制与总的空间限制是一样的。如果你在本机上大数据 RE,OJ 上 AC 可能是这个原因。
这也意味着 OJ 上的自定义测试可以测试一些在本机上可能爆栈的数据。你也可以手动开栈:
- 若本机是 Windows 系统,可以在编译命令中加入
-Wl,--stack=你想要的栈大小
(单位为字节)即可。 - 若本机是 Linux 系统,可以在终端中输入
ulimit -s 你想要的栈大小
(单位为KB
),那么在这个终端中运行的程序的栈空间限制就都会变成你设置的那样。(但是这里设置的栈空间不能太大,可以输入命令ulimit -Hs
查看最多能够允许的大小;同时也可以在/etc/profile
最后也加上这句话,这样就不用每次都用命令改变了)
为什么我在本地 / 某某 OJ 上通过了,但在 NFLSOJ 却无法 AC?
对于这类问题,我们在这里简单列一下可能原因:
- 评测机系统是 Linux,如果使用
scanf
或printf
请用%lld
(而不是%I64d
)读取或输出 64 位整数。 - Linux 中换行符是
\n
而 Windows 中是\r\n
。有些数据在 Windows 下生成,而 NFLSOJ 评测环境为 Linux 系统。这种情况在字符串输入中非常常见。 - 评测系统建立在 Linux 下,可能由于使用了 Linux 的系统定义的函数或变量而出现 CE,但在 Windows 下正常。
- Linux 对内存的访问控制更为严格,因此在 Windows 上可能正常运行的无效指针或数组下标访问越界,在评测系统上无法运行。
- 严重的内存泄露的问题很可能会引起系统的保护模块杀死你的进程。因此,凡是使用
malloc
(或calloc
、realloc
、new
等)分配的内存空间,请使用free
(或delete
)完全释放。 - 为了防止一些奇怪的操(yōu)作(huà),我们禁掉了以下字符串(仅对 C/C++ 生效):
pragma
_Pragma
__attribute__
optimize
asm
__asm__
__asm
。这些字符串只要作为一个完整的词出现,就会触发编译错误(哪怕出现在注释和字符串中也算)。 - 当然数据可能真的有问题。但是如果不止一个人通过了这道题,那最好不要怀疑是数据的锅。反之,可以立即联系我们上报!
交互式类型的题怎么本地测试?
交互式的题一般给了一个头文件要你 include 进来,以及一个实现接口的源文件 grader。好像大家对多个源文件一起编译还不太熟悉。
对于 C++:g++ -o code grader.cpp code.cpp
对于 C 语言:gcc -o code grader.c code.c
如果你是悲催的电脑盲,实在不会折腾没关系!你可以把 grader 的文件内容完整地粘贴到你的 code 的 include 语句之后,就可以了!
什么你是 Pascal 选手?一般来说都会给个 grader,你需要写一个 Pascal 单元。这个 grader 会使用你的单元。所以你只需要把源文件取名为单元名 + .pas,然后:
对于 Pascal 语言:fpc grader.pas
就可以啦!
如何使用博客?
如何正确设置 problem.conf?
简要的设置见这篇博客。如果还有什么需求,请联系 OJ 管理员。
联系方式
如果你想出题、想办比赛、发现了 bug 或者对网站有什么建议,可以通过下面的方式联系我们:
下面的邮箱地址暂时是假的→_→。可以联系 2915154295@qq.com 或 daiyan2003@126.com。