- 分享
OJ 出题规范
- 2024-9-28 19:07:18 @
出题规范参考牛客命题规范,并做了一定改动。
原来的题目由于各种历史包袱,暂不要求,只对题号为后的题目作要求。
- 禁止在没有严格证明,并且没有使用暴力程序验证在数据范围内成立的情况下使用数学结论。(经典数学结论/数学定理/公理不在此行列)
- 要求输出 、的题目,不得要求选手输出 、 等情况。题目应以考查做题人能力为主,不应在无意义的地方为难做题人。
- 推荐使用
testlib
来生成、验证、评测数据。除了讲课时用到的模板题之外,所有比赛题目都应该带有Validator
。 - 输入输出描述必须包含变量名(、、等)、变量范围(等)、变量的输入输出格式(e.g. 第一行一个整数表示, 接下来行,每行个整数)。并且用 数学公式排版(简单介绍见latex-入门)。
- 树上题目/图论题目,若题目未特殊声明,数据禁止完全随机,必须保证暴力算法和搜索不能通过。
- 图论问题必须显式的说明是单向边还是双向边,在输入描述中必须指出测试数据中是否包含自环、重边等信息。
- 树上问题如果是有根树,必须显式的指出根节点或输入根节点,不能让选手通过输入的方式自己推导根节点。
- 输出为实数的题目应使用
special judge
,并且保证分别使用long double
和double
的情况下,绝对和相对误差的最小值不超过EPS
。 - 禁止以“某道题目是难题”为由,将时间空间卡的特别死,仅让使用
c/c++
的选手通过,或必须用上各种std
中的trick
才能通过。 - 禁止题目要求读取数据直到文件结尾
EOF
,应使用表示测试用例的组数。 - 禁止限制选手是否输出行末空格,以及文件末的回车。必须保证无论选手是否输出行末空格,以及文件末的回车都能通过题目(还是前面提到的原则:题目应该以考查做题人能力为主,不在无意义的地方过多要求选手)。
- 若要求选手输入字符串时包括空白字符等需要整行读取的情况时,则必须给出该字符串的长度,例如:输入一个数字NN表示字符串长度,接下来一行输入一个包含空白字符的字符串...
C/C++
的std
不得使用内联汇编、特定指令集、向量优化等过于底层的优化。C/C++
的std
不得使用freopen
优化的快读。std
标准程序使用的时间/空间限制,在不存在近似复杂度的非预期解法下不得超过时间/空间限制的50%,切任何条件下均严禁超过80%。- 对于区分,、的题目,应在醒目位置(一般是题目开头位置)注明与另一个版本的差异。
- 题目中出现的大数字,要么使用千分符隔开(e.g. ),要么使用科学计数法(e.g. )。
- 题目中空间限制不得低于 ,否则可能会导致
java
等语言无法通过。 - 如与题目解题方式/题目难度无关,例如计算几何题目中输入点坐标时,尽量使用整点而非浮点数。
- 题目输入量禁止达到及以上,当出现这种情况时,通过在题目中给出(随机)数据生成器的伪代码,或混合输入方式。
- 禁止在题目中要求选手使用
std::random
或mt19937
等库函数代替输入。必须在题目中提供随机数生成器。 - 强制在线题目必须在样例解释/备注中添加加密前的数据。
- 题目涉及到 异或和、排列 等定义时,必须在题目中给出定义,并在样例中给出有意义的数据。
- 题目中尽量不出现对负数取模的情况。
- 题目输入/输出中只能包含字符,禁止出现中文和字符.
- 当题目描述中涉及到“集合”的概念时,需注意是否为“可重集”。当涉及到“子集”概念时,需注意是否为“真子集”,且是否包含“空集”。需在题目描述中显式给出,或不在题目描述中说明,但有样例支持且在样例解释中给出。
- 当题目涉及到子串/子区间/子序列/前缀/后缀等概念时,必须显式的注明①是否包含自身;②是否可以为空,或在样例中有所体现。
- 当涉及到有多少种不同的XX满足条件的描述时,需对“不同”做相应的解释。若题目首先需要选手进行某些“操作”,再求不同的“值”时,使用“本质不同”强调其值上的差别而非操作上的差异。例如:求本质不同的子序列/子串个数。
- 在不暴露核心算法的前提下,博弈类题目需提供至少 组先手胜利, 组后手胜利的样例输入/输出。
- 如果输入变量的个数多余,则必须在题目描述醒目位置提醒其数据范围,建议选手使用快速的输入方式。
0 comments
No comments so far...