Skip to content

关于NOI系列赛编程语言使用限制的规定

适用范围

本规定适用于NOI系列的各项全国性竞赛。NOI其它规章、规则中所有与本规定不符之处,均以本规定为准。不遵守本规定所造成的不良后果由选手本人承担。评测环境与竞赛环境相同。

编程通则

1. 源程序文件提交规则

对于每一道试题,选手只应提交一个源程序文件。

文件命名规则:

  • 源程序文件名由试题名称缩写加后缀构成
  • 源程序文件名及后缀一律使用小写
  • 各语言后缀:
    • PASCAL:.pas
    • C:.c
    • C++:.cpp

多文件处理: 当参赛选手对一道试题提交多份使用不同后缀的源程序文件时,测试系统按照 .c, .cpp, .pas 的顺序选取第一份存在的文件进行编译和评测,并忽略其他文件。

2. 文件大小和目录限制

  • 使用C/C++语言者不得使用自己的头文件
  • 使用Pascal语言者不得使用自己的库单元
  • 除另有规定外,每道题参赛程序源文件不得大于 100KB
  • 如选手在规定目录下另建其它子目录,这些子目录中的文件均会被评测系统忽略

3. 程序执行要求

选手程序应正常结束并返回Linux系统,主函数的返回值必须为 0

4. 程序行为限制

选手程序中只允许通过对指定文件的读写、以及对指定库函数的调用等题目中明确规定的方式与外部环境通信。

严禁下列操作:

  • 试图访问网络
  • 使用 forkexecsystem 或其它线程/进程生成函数
  • 打开或创建题目规定的输入/输出文件之外的其它文件和目录
  • 运行其它程序
  • 改变文件系统的访问权限
  • 读写文件系统的管理信息
  • 使用除读写规定的输入/输出文件之外的其它系统调用
  • 捕获和处理鼠标和键盘的输入消息
  • 读写计算机的输入/输出端口

5. 内存使用限制

除题目另有规定外,选手程序中所使用的静态和动态内存空间总和不得超过 128MB

各语言特定限制

对C程序的限制

禁止使用:

  • 内嵌汇编
  • 以下划线开头的库函数或宏(自己定义的除外)

允许使用的头文件: 在程序中只能使用下述头文件以及被它们所间接包含:

c
assert.h, ctype.h, errno.h, float.h, limits.h, 
math.h, stdio.h, stdlib.h, string.h, time.h

整数类型限制: 64位整数只能使用 long long 类型及 unsigned long long 类型。

对C++程序的限制

禁止使用:

  • 内嵌汇编
  • 以下划线开头的库函数或宏(自己定义的除外)

整数类型限制: 64位整数只能使用 long long 类型及 unsigned long long 类型。

STL使用: 可以使用STL中的模板。

对Pascal程序的限制

禁止使用:

  • 内嵌汇编
  • 任何编译开关

库单元限制: 在程序中禁止使用除以下单元之外的其他单元:

  • system 库(自动加载)
  • math 库(须用 uses math 子句)

合法性判定

凡满足上述规定,并且能在题目规定的命令行下编译通过的程序均为合法的源程序。

注意

即使源程序合法,只要程序执行时有违规行为时,仍被判定为违规。

生效时间

本规定自公布之日起生效。