2022-10-20 18:21:11 +08:00
|
|
|
|
# 示例题目
|
|
|
|
|
|
|
|
|
|
## 文件构成
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
.
|
|
|
|
|
├── config.json # 题目配置信息
|
2023-12-23 19:50:32 +08:00
|
|
|
|
├── description.md # (optional) 题目描述,必须通过 API 提交,使用 import 脚本时将读取该文件
|
2022-10-20 18:21:11 +08:00
|
|
|
|
├── data # 数据目录
|
|
|
|
|
│ ├── input # 输入数据
|
|
|
|
|
│ │ ├── (x).input # 第 x 组输入数据
|
|
|
|
|
│ │ └── ...
|
|
|
|
|
│ └── output # 输出数据
|
|
|
|
|
│ ├── (x).output # 第 x 组输出数据
|
|
|
|
|
│ └── ...
|
|
|
|
|
└── judge # 评测脚本目录
|
|
|
|
|
├── c.Makefile # (optional) 自定义评测脚本
|
|
|
|
|
├── prebuild.Makefile # (optional) 题目初始化脚本
|
2023-07-16 15:42:26 +08:00
|
|
|
|
└── ... # 其余可能用到的程序、脚本等
|
2022-10-20 18:21:11 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 详细说明
|
|
|
|
|
|
|
|
|
|
### 题目配置信息
|
|
|
|
|
|
|
|
|
|
```json5
|
|
|
|
|
{
|
2023-12-23 19:50:32 +08:00
|
|
|
|
// 支持的语言
|
2024-01-27 21:59:38 +08:00
|
|
|
|
"Languages": [
|
|
|
|
|
{
|
|
|
|
|
// C 语言
|
|
|
|
|
"Lang" : "c",
|
|
|
|
|
// 使用自定义评测脚本,脚本为 ./judge/custom.Makefile,Cmp 将被忽略
|
|
|
|
|
"Judge" : {"Type": "custom", "Script": "custom.Makefile", "Cmp": ""},
|
|
|
|
|
// 运行时配置:时间(ms) 内存(MB) 进/线程数目
|
|
|
|
|
"Runtime": {
|
2024-04-27 22:02:14 +08:00
|
|
|
|
// 编译阶段,可选,若缺失整个字段则替换为如下默认值
|
|
|
|
|
"Compile": {
|
|
|
|
|
"TimeLimit" : 60000,
|
|
|
|
|
"MemoryLimit" : 256,
|
|
|
|
|
// NProcLimit 为可选字段,不填默认为 0
|
|
|
|
|
"NProcLimit" : 64,
|
|
|
|
|
// WriteFileLimit 为可选字段,不填默认为 1
|
|
|
|
|
"WriteFileLimit": 64
|
|
|
|
|
},
|
2024-01-27 21:59:38 +08:00
|
|
|
|
// 运行阶段,必选
|
2024-04-27 22:02:14 +08:00
|
|
|
|
"Run" : {
|
|
|
|
|
"TimeLimit" : 1000,
|
|
|
|
|
"MemoryLimit" : 16,
|
|
|
|
|
// SoftMemoryLimit 为可选字段,不填默认为 MemoryLimit
|
|
|
|
|
// SoftMemoryLimit 仅适用于运行时沙箱设置,实际判断内存超标时使用 MemoryLimit
|
|
|
|
|
"SoftMemoryLimit": 16,
|
|
|
|
|
"NProcLimit" : 1,
|
|
|
|
|
// WriteFileLimit 为可选字段,不填默认为 1
|
|
|
|
|
"WriteFileLimit" : 1
|
|
|
|
|
},
|
|
|
|
|
// 答案检查阶段,可选,规则与 Compile 相同
|
|
|
|
|
"Check" : {"TimeLimit": 60000, "MemoryLimit": 128, "NProcLimit": 64, "WriteFileLimit": 16}
|
2024-01-27 21:59:38 +08:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
// C++ 语言
|
|
|
|
|
"Lang" : "cpp",
|
|
|
|
|
// 使用默认评测脚本,答案比对方式为 NCMP(testlib),Script 将被忽略
|
|
|
|
|
"Judge" : {"Type": "default", "Script": "", "Cmp": "NCMP"},
|
|
|
|
|
// 运行时配置:Run 必须存在,其余可选,默认值见 C 语言部分
|
|
|
|
|
"Runtime": {
|
|
|
|
|
"Run": {"TimeLimit": 1000, "MemoryLimit": 16, "NProcLimit": 1}
|
|
|
|
|
}
|
2024-01-30 20:56:07 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"Lang" : "python3",
|
|
|
|
|
"Judge" : {"Type": "default", "Script": "", "Cmp": "NCMP"},
|
|
|
|
|
"Runtime": {
|
|
|
|
|
"Run": {"TimeLimit": 1000, "MemoryLimit": 16, "NProcLimit": 1}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"Lang" : "pypy3",
|
|
|
|
|
"Judge" : {"Type": "default", "Script": "", "Cmp": "NCMP"},
|
|
|
|
|
"Runtime": {
|
|
|
|
|
// pypy3 运行时内存常数开销大,A+B 问题内存至少给到 80 MB
|
|
|
|
|
"Run": {"TimeLimit": 1000, "MemoryLimit": 80, "NProcLimit": 1}
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"Lang" : "rust",
|
|
|
|
|
"Judge" : {"Type": "default", "Script": "", "Cmp": "NCMP"},
|
|
|
|
|
"Runtime": {
|
|
|
|
|
"Run": {"TimeLimit": 1000, "MemoryLimit": 16, "NProcLimit": 1}
|
|
|
|
|
}
|
2024-04-27 22:02:14 +08:00
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"Lang" : "go",
|
|
|
|
|
"Judge" : {"Type": "default", "Script": "", "Cmp": "NCMP"},
|
|
|
|
|
"Runtime": {
|
|
|
|
|
// Go 运行时会申请大量内存与线程
|
|
|
|
|
"Run": {"TimeLimit": 1000, "MemoryLimit": 16, "SoftMemoryLimit": 1024, "NProcLimit": 0}
|
|
|
|
|
}
|
2024-01-27 21:59:38 +08:00
|
|
|
|
}
|
|
|
|
|
],
|
2024-04-27 22:02:14 +08:00
|
|
|
|
// 题目构建阶段,用于生成测试数据等,可选,规则与 Compile 相同
|
|
|
|
|
"Prebuild" : {"TimeLimit": 300000, "MemoryLimit": 256, "NProcLimit": 64, "WriteFileLimit": 1024},
|
2024-01-27 21:59:38 +08:00
|
|
|
|
// 评测点信息,总分应当为 100 分
|
|
|
|
|
"Tasks" : [
|
|
|
|
|
// 第一个评测点,分值 10 分,使用 ./data/{input,output}/1.{input,output} 为测试数据
|
|
|
|
|
{"Id": 1, "Points": 10},
|
2023-07-16 15:42:26 +08:00
|
|
|
|
{"Id": 2, "Points": 20},
|
|
|
|
|
{"Id": 3, "Points": 30},
|
|
|
|
|
{"Id": 4, "Points": 40}
|
2022-10-20 18:21:11 +08:00
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 评测脚本
|
|
|
|
|
|
2023-07-16 15:42:26 +08:00
|
|
|
|
1. 默认评测脚本目前只支持 `c` 语言和 `cpp`,参见 `../../framework/template/default/{c,cpp}.Makefile`
|
2024-01-30 20:56:07 +08:00
|
|
|
|
2. 自定义评测脚本参见 `./judge/custom.Makefile`
|
2023-12-23 19:50:32 +08:00
|
|
|
|
3. `prebuild.Makefile`: 题目初始化脚本,用于编译辅助程序、生成数据等。如果存在该文件,系统会在题目分发到判机后自动执行,否则跳过该步骤
|
2022-10-20 18:21:11 +08:00
|
|
|
|
|
2023-07-16 15:42:26 +08:00
|
|
|
|
## 注意事项
|
2022-10-20 18:21:11 +08:00
|
|
|
|
|
2023-07-16 15:42:26 +08:00
|
|
|
|
1. 打包的时候确保 `config.json`, `data`, `judge` 在根目录下
|
2022-10-20 18:21:11 +08:00
|
|
|
|
|