diff --git a/views/help.ejs b/views/help.ejs
index deda725..7c26df1 100644
--- a/views/help.ejs
+++ b/views/help.ejs
@@ -8,6 +8,7 @@
C++ 使用 g++
编译,命令为 g++ source_file.cpp -o exec_file -O2 -lm -DONLINE_JUDGE
;
C 使用 gcc
编译,命令为 gcc source_file.c -o exec_file -O2 -lm -DONLINE_JUDGE
;
Pascal 使用 fpc
编译,命令为 fpc source_file.pas -O2
。
+
Java 编译时会自动检测您的代码中 public class
,如果您的代码中没有 public class
,请将入口类命名为 Main
。
C# 与 Visual Basic 使用 Mono 平台的编译器与运行环境。
个性签名可以使用 Markdown 与 HTML,请不要在其中添加恶意代码。
在添加题目页面填写题面,题目内容使用 Markdown 与 TeX 公式。
-在添加好的题目页面选择「管理」,可以调整时间和内存限制。数据包是一个 zip
压缩包:
xxx.zip
-|
-|--data_rule.txt
-|--input1.in
-|--output1.out
-|--input2.in
-|--output2.out
-|--......
-
- 其中 data_rule.txt
格式类似这样三行:
1 2 3 4 5 6 7 8 9 10
-input#.in
-output#.out
-
- #
会被替换成相应的测试点编号;#
会被替换成相应的测试点编号。如果需要配置子任务,则需要改为以下格式:
-sum:30 1 2 3
-min:20 4 5 6
-mul:50 7 8 9 10
+ 在添加题目页面填写题面,题目内容使用 Markdown 与 TeX 公式。
+ 测试数据
+旧版的 data_rule.txt
已经停止使用,新加入的题目请使用新的 data.yml
配置文件。关于 YAML,详见 YAML 的 Wikipedia 词条。
+对于传统和提交答案题目,data.yml
是可选的,系统会自动识别您的数据包,将每个 .in
文件对应到 .out
或 .ans
文件,并将 spj_
开头的文件作为 Special Judge(详见下文的「Special Judge」)。
+传统
+对于传统题目,data.yml
的格式如下:
+subtasks:
+ - score: 30 # 这个子任务的分数(注意,所有子任务的总分必须为 100)
+ type: sum # 子任务类型,可选的值有 sum、min 和 mul.
+ cases: [1, 2, 3] # 测试点编号可为数字
+ - score: 30 # 另一个子任务
+ type: mul
+ cases: ['4', '5', '6'] # 测试点编号也可为字符串
-input#.in
-output#.out
-
- 原有的第一行改为若干行(空白行将被忽略),每行表示一个子任务,冒号前面为评分方式,后面为该子任务的总分数,之后若干个整数表示测试点编号。支持的评分方式有:
-
- sum
:测试点分数按百分比相加;
- mul
:测试点分数按百分比相乘;
- min
:取各测试点最低分;
-
- 注意:zip
包内没有一层文件夹,直接是上述文件。如果不希望将数据打包,可以通过题目页面的「测试数据」按钮进入测试数据文件上传的页面。
-
- 如果没有 data_rule.txt
,则评测系统会自动将 .in
文件与同名的 .out
或 .ans
匹配。
- 如果需要配置提交答案题目的数据,请添加额外的一行,表示用户提交的文件名:
- sum:30 1 2 3
-min:20 4 5 6
-mul:50 7 8 9 10
+inputFile: 'dat#.in' # 测试数据包中的输入文件
+outputFile: 'dat#.ans' # 测试数据包中的输出文件
+# 上述文件名中的 # 字符将被替换为测试点编号
+
+# 可选 - Special Judge
+specialJudge:
+ language: cpp
+ fileName: spj.cpp
-input#.in
-output#.out
-submit#.out
+# 可选 - 附加源文件
+# 例如,给选手提供一个 C++ 头文件,选手可以引用它,调用您提供的代码。
+# 常用于封装交互库
+extraSourceFiles:
+ - language: cpp
+ files: # 这是一个数组
+ - name: itlib_cpp.h # 数据包中的文件名
+ dest: interaction.h # 目标文件名,在编译时被放置在与选手程序的同一目录下
+ - language: c # 给不同的语言提供不同的附加源文件
+ files:
+ - name: itlib_c.h
+ dest: interaction.h
+
+提交答案
+对于提交答案题目,inputFile
和 outputFile
可以省略,用 userOutput
表示用户提交的答案文件名。
+userOutput: 'dat#.out'
+
+交互
+对于交互题目,需要加入以下内容:
+# 交互器
+interactor:
+ language: cpp
+ fileName: interactor.cpp
- Special Judge
- 如果需要使用 Special Judge 评分,请在数据包中添加 spj_LANG.xxx
,其中 xxx
为任意后缀名,LANG
为所用语言的简称,可为 c
、cpp
、cpp11
、csharp
、haskell
、java
、lua
、nodejs
、pascal
、python2
、python3
、ruby
、vala
、vbnet
。
- Special Judge 程序运行时,其目录下会有四个文件 input
、user_out
、answer
、code
,分别对应该测试点的输入文件、用户输出、该测试点的输出文件、用户的代码(对于非提交答案题目)。
- Special Judge 程序运行完成后,应将该测试点的得分输出到标准输出(stdout
)中(范围为 0 到 100,将自动折合为测试点分数),并将提供给用户的额外信息输出到标准错误输出(stderr
)中。
-
交互器和选手程序同时运行,交互器的标准输入和标准输出连接了选手程序的标准输出和标准输入 —— 交互通过输入输出进行。
+交互器运行时,其目录下会有 input
文件,表示该测试点的输入文件。交互器运行结束后,需要将选手得分写入 score.txt
文件中,并将提供给用户的额外信息输出到标准错误输出(stderr
)中。
如果您希望实现 NOI 试题风格的交互(选手通过函数调用与交互器交互),请编写一些头文件作为「附加源文件」并封装标准输入输出的交互。
+子任务是一组测试点的集合,一个子任务的分数由其包含的测试点的分数计算而来,具体的计算方式根据子任务类型而定:
+sum
:测试点分数按百分比相加;mul
:测试点分数按百分比相乘;min
:取各测试点最低分。Special Judge 用于传统或提交答案题目。
+如果您没有编写 data.yml
,请在数据包中添加 spj_LANG.xxx
,其中 xxx
为任意后缀名,LANG
为所用语言的简称。
Special Judge 程序运行时,其目录下会有四个文件 input
、user_out
、answer
、code
,分别对应该测试点的输入文件、用户输出、该测试点的输出文件、用户的代码(对于非提交答案题目)。
Special Judge 程序运行完成后,应将该测试点的得分输出到标准输出(stdout
)中(范围为 0
到 100
,将自动折合为测试点分数),并将提供给用户的额外信息输出到标准错误输出(stderr
)中。
配置数据时,描述 Special Judge 或交互器的语言时使用语言的简称,它们是 c
、cpp
、cpp11
、csharp
、haskell
、java
、lua
、luajit
、nodejs
、pascal
、python2
、python3
、ruby
、vala
、vbnet
、ocaml
。