- 035966_L3 的博客
「官方」Sleeping Cup 出题规范
- 2025-8-9 17:14:33 @
1. 题目文本
2. 出题原则
以上链接中所有规则均需遵守,例外:003,020,021,022,030,034,038,041。
以下有一些额外限制:
- 数据文件需要依次命名为
1.in/out
,2.in/out
,以此类推。 - 数据生成器的名称必须包含
gen
字段。 - 允许没有部分分,但不允许过于不合理的部分分。
- 遵守本文给出的其他规范。
- 遵守第一节链接中给出的其他规范。
- (可选)尽量和 历届试题 保持风格一致。
3. 时间 / 空间限制
- std 应当在最坏情况下以不超过时间 / 空间限制的 通过题目。
- 当时间限制大于 秒时,对 std 的时间要求放宽 秒。
- 当时间限制小于 MB 时,对 std 的时间要求放宽 MB。
- 时间限制不得小于 秒,且必须为 秒的整数倍。
- 大于 秒的时间限制必须为 秒的整数倍,但不设上限。
- 空间限制必须在 MB - MB 中取值,必须是整数 MB,且 MB 数必须是 的整数次幂。
- 空间限制为 MB 的题目不保证能够正常评测。
- 如果卡空间不是题目难度的一部分,则空间限制必须设为 MB。
4. 数据文件
上传的数据中必须包含:
- 所有输入输出数据文件。
config.yaml
,题目配置文件。std.cpp
,标准程序。- 所有数据生成器。
- (如果有)checker、交互库等额外文件。
- (对于提交答案题)所有标准答案。
5. 题解
题解应当简要描述题目做法,可以比较简略,但对于难以理解的题目必须给出足够解释。
题解中必须包含标准答案或标准程序代码。
6. 主观题
主观题中存在以下额外要求:
- 除题目描述和答案示例外与 已有的主观题 保持一致。
- 对于存在部分分的主观题,处理方式参考 #2 E。
- 对于存在子问题的主观题,处理方式参考 #3 D。
- 对于无部分分的普通主观题,处理方式参考 #1 D。
- 题目描述中必须将需要选手作答的问题部分全文加粗。
- 参考答案必须和答案示例保持格式一致,且部分分基准点必须加粗 + 高亮标出。
- 测试数据内应当恰好包含以下文件。
# 文件名:config.yaml
# 这三行是注释,可以删去。
# 除此之外,请务必原样粘贴以下代码!
type: default
memory: 512MB
filename: proof
checker_type: testlib
checker: checker.cpp
subtasks:
- score: 100
if: []
id: 1
type: sum
cases:
- input: /dev/null
output: /dev/null
// 文件名:checker.cpp
// 以下程序适用于没有部分分的主观题。
// 同样的,除了注释以外,什么都不要动!
#include <bits/stdc++.h>
#include "testlib.h"
using namespace std;
const int answers[] = {1, 2, 3, 4, 5, 6, -1, -2, -3, -4, -5, -6, 0};
// answers 数组记录了通过本题的选手名单,例如:
// 1 代表 UID = 1 的选手赛时通过了此题。
// -2 代表 UID = 2 的选手赛后通过了此题。
// 0 是结束标志。
// 当有选手通过本题时,
// 请更新 answers 数组,
// 并向管理组申请更新评测状态。
int main(int argc, char** argv)
{
registerTestlibCmd(argc, argv);
int ID = ouf.readInt();
int pos = 0;
while (answers[pos])
{
if (answers[pos] == ID) quitf(_ok, "");
pos++;
}
quitf(_wa, "");
}
// 文件名:checker.cpp
// 以下程序适用于有部分分的主观题。
// 同样的,除了注释以外,什么都不要动!
#include <bits/stdc++.h>
#include "testlib.h"
using namespace std;
const int answers[] = {1, 2, 3, 4, 5, 6, -1, -2, -3, -4, -5, -6, 0};
const double scores[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0};
// answers 数组记录了在本题得分的选手名单,例如:
// 1 代表 UID = 1 的选手赛时在此题得分。
// -2 代表 UID = 2 的选手赛后在此题得分。
// 0 是结束标志。
// scores 数组记录了对应选手的得分,例如:
// 0.2 代表得了 20 分,
// 1 代表得了 100 分(满分)。
// answers 数组中记录的每个选手对应相同下标的 scores 参数,
// 例如 answers[3] 对应 scores[3]。
// 当有选手在本题得到新的个人得分记录时,
// 请更新 answers 数组和 scores 数据,
// 并向管理组申请更新评测状态。
int main(int argc, char** argv)
{
registerTestlibCmd(argc, argv);
int ID = ouf.readInt();
int pos = 0;
while (answers[pos])
{
if (answers[pos] == ID) quitf(_ok, "");
pos++;
}
quitf(_wa, "");
}