一个好的题目或者好的比赛都会遵循一定的规则。为规范题目形式,特制定本规则。

题目内容

题目需包含:标题、描述、输入描述、输出描述、样例输入、样例输出、样例解释或提示信息(可选)、测试数据。

有需要的应该写个暴力,且拿暴力跟标程对拍。

题目的测试数据文件要求

  1. 数据文件包含输入文件,输出文件。就算题目无输入要求,也应包含一个空的输入文件(注:因上传组件空文件空文件无法上传,如无输入要求,需在空文件里随便打几个空格才能把文件上传)。
  2. 输入输出的文件名称必须一一对应,只是后缀不同。输入文件的后缀为 `in`,输出文件的后缀为 `out`。举例:输入文件文件全名为 `1.in`,则对应输出文件的文件全名必须为 `1.out`
  3. 题目的测试数据中必须包括各种各样的数据,而且应该有各种各样的达到最小数据范围的数据和达到最大数据范围的数据。 也就是说如果1 ≤ n ≤ 100000,那么数据中既应该有 n = 1,也应该有 n = 100000。
  4. 一个文件对(即输入文件与对应的输出文件)称为一个测试点,测试点可以有多个。程序运行时间的计算结果为所有测试点中,单个测试点所需时间的最大值。
  5. 不建议要求采用“输入 t, 表示 t 组数据”之类的题面,建议一个测试点一组样例,即类似于 CF 或者 World Final 那样题面即可。 为保证能够完整测试程序,建议测试点在 30 左右(此处测试点数量不是强制要求,但必须根据题目具体内容来合理选择测试点的数量。必须包括各种各样的数据。),如无法满足测试,则应控制在 150 以内。
  6. 测试数据不应完全依赖于程序随机生成,最好人为考虑各种不同的情况,针对各种情况出数据。

题面规范

  1. 题面必须清晰好懂,没有语法错误。
  2. 题目背景中不要写数据范围,全部都要写在输入格式里。
  3. 对于数字的输入,必须写明是实数(或浮点数)还是整数。
  4. 必须写明所提到的所有变量的范围。范围描述应当使用 ≤,而不是 <。如果提到一个字符串,必须写明哪些字符可以出现在这个字符串内。
  5. 题目中描述数组下标最好从 1 开始。
  6. 如果是中文题面的题目,请正确使用标点符号,不要混用中英文标点(中文应使用全角,英文应使用半角)。
  7. OJ 支持 Katex 语法。题目出现的所有变量名必须 Katex 语法来包含,数据范围的描述也用 Katex 来写。参考下文题目规范示例。

    说明:Katex 是用来在网页上展示漂亮的数学公式。Katex 语法参考:Katex Supported Functions

    在 Katex 中,使用 $ 符号包含的为行内公式,使用 $$ 符号包含的为单行公式(即这个公式会占据一整行,并居中显示)。

  8. 如果是中文题面,出现的变量或者英文要与中文之间要有一个空格

    正确示范:在 Shiyang 手上,有 $n$ 个苹果

    错误示范 1:在Shiyang手上,有$n$个苹果

    错误示范 2:有$ n $个苹果

    说明:添加空格有利于阅读,注意对比示范中空格出现的位置,此处 n 是一个变量,参照第 7 条规则,用$符号包含表明这是个变量。

  9. 不建议在中文题面中用英文名、汉语拼音、人物名字汉语拼音的缩写(此处只是不建议,非强制约束。如需使用英文名,建议使用某队员的网络英文ID)。 人物取名建议优先考虑人物的外号。

题面规范示例及效果图

点击图片可查看高清大图。

Special Judge

简称 SPJ,这是针对用户输出的特判。比如,根据题面求解出来的答案可能存在多个,这样就无法定义一个准确的输出文件来判断用户是否正确,这时就需要 SPJ。或者允许用户的输出在某一精度范围内是正确的。

写法详见:SPJ

如何快速生成输入文件

以下只是提供 C 语言一种示范,数据请勿完全依赖随机生成,应根据题目要求考虑不同情况设定数据,同时应包含题面各个范围的数据情况。

#include <bits/stdc++.h> int main() { // 生成 20 组数据 for (int test = 1; test <= 30; test++) { char name[100]; sprintf(name, "%d.in", test); // 注意文件名称必须以 in 作为后缀 FILE * fp = fopen(name, "w"); int a = rand() % 100 + 1; // 随机生成在一个在 [1, 100] 数 int b = rand() % 100 + 1; // 随机生成在一个在 [1, 100] 数 fprintf(fp, "%d %d\n", a, b); // 输出到文件中 fclose(fp); } return 0; }


出题请使用:Polygon System

这是一个出题平台,任何用户都可以在该平台上面创建题目,非管理员用户只能查看自己创建的题目。只有管理员才能将该平台上的题目加入题库中。

你需要准备如下内容:

  1. 题目标题
  2. 题目描述
  3. 输入描述
  4. 输出描述
  5. 样例输入(可提供多组)、对应的样例输出
  6. 题目的提示信息(可选)
  7. 测试数据的输入文件
  8. 解决该问题的源程序

注:测试数据的输出文件由该平台根据你提供的源程序生成