题目内容

题目不得违反国家政策与法律法规,不得出现敏感信息,不得出现强特征的个人、团体、机构等名称。

关于原题

原题大致可分为完全一致、几乎一致和做法一致三种。

  • 完全一致:使用一题的AC代码可以AC另一题
  • 几乎一致:由一题的 AC 代码改动至另一题的 AC 代码可以由一个不会该题的人完成。
  • 做法一致:核心思路、做法一致,但代码实现上、不那么关键的细节上有差异。

这三种原题自下而上为包含关系。

以下情况不应出现:

  1. 在明知有“几乎一致”的原题的情况下出原题。
  2. 由于未使用搜索引擎查找导致自己不清楚有原题,从而出了“几乎一致”的原题。
  3. 在“做法一致”的原题广为人知(如:NOIP、ACM区域赛、知名比赛网站的常规比赛轮次)时出原题。
  4. 在带有选拔性的考试的非送分题中出现“做法一致”的原题。

以下情况最好不要出现:

  1. 在明知有至少为“做法一致”的原题的情况下出原题。
  2. 由于未使用搜索引擎查找导致自己不清楚有原题,从而出了“做法一致”的原题。
  3. 在任何情况下出“几乎一致”的原题。

题面

题目背景

  • 题面背景最好尽可能简短。如果题目背景比较长的时候,应当与题目描述分开。题目背景如果需要有主人公人设,均使用牛牛、牛妹等。

题目描述

  • 要求清晰易懂

  • 题面中的每个可能不被理解的定义都应得到解释,不应凭空冒出未加定义的概念。如:"子序列"和"子串"的定义,对于一些概存在极限情况的概念也应做解释,如:一个点是否是一棵XX树。

  • 题面中涉及到的每个概念应当使用单一的词汇来描述。如:不应一会儿说“费用”,一会儿说“代价“。

  • 保证你的题面不会自相矛盾,保证题面不能被错误理解而自圆其说,即使这种理解是反常识、没有人会这么去想的。

  • 顺着读题目描述应当能看懂每一句话,并理解题目的任务与要求。不能需要看了输入输出格式才能明白题意,甚至需要根据样例来猜题意。

  • 同一题目的变量名大小写应该同一,不应出现在某处是,而在另一处变成的情况。同时建议变量与题目相关时使用小写,无关时(如数据组数)使用大写。

  • 题目中的公式符号和数字都应用书写,由于nowcoder录题系统的特性,对于单个字母或者数字会转义失败变成普通文本,此时对于字母应加\mathit,数字应加\text.

    如:应写为:

    $\mathit n$

    应写为:

    $\text 1$

    或者
    将写好的公式,先复制到牛客讨论区的markdown预览中,然后复制回来即可。

输入输出格式

  • 输入输出格式清晰完整即可,没有死板的要求,需要特别注意的是,如果输出中含有小数,请尽量使用 。如果无法使用 ,请保证对精度的要求是有限的。

数据范围

  • 数据范围都统一为写在输入格式里,数据范围中最容易犯的错误就是不完整。输入中的每一个数、每一个字符串都应该有清晰的界定。在上文所给出的输入输出格式示例中就有一些数据范围的正确写法。

  • 如果单个测试点包含多组数据,应在输入格式加粗说明「本题有多组数据」。

  • 描述多个并列的变量时,应合并为一个公式。

  • 数据类型(如整数、实数、字符等)应在输入格式中说明,数据范围应在说明/提示中说明。数据范围必须有上界和下界的描述,字符串必须有字符集的描述,实数必须有小数点后位数的描述。因此输入格式中不必说明「正整数」或「非负整数」而只需说明「整数」。

  • 除部分特殊情况外,数据范围中 的数应使用科学计数法 或者使用\,进行三位一分隔

  • 不同变量的数据范围应分开为多个公式,即要求公式与公式之间用全角逗号隔开。特别地,若存在多个变量的数据范围相同,也可以合并为同一个公式。

  • 部分分应描述为「对于 的数据」而不是「对于50%的数据」。

    数据范围的常见遗漏:

    1. “整数”中的“整”。
    2. 题面中只说了是“整数”没说是“正整数”,并且数据范围中只有上限没有下限。
    3. 字符串没说字符集。
    4. 实数没说小数点后位数。
    5. 某些变量没有给范围。

    你需要保证标程可以通过满足题面所述数据范围的任何一组数据。

样例

  • 样例应当有一定的强度,能够查出一些简单的错误。读错题意的人应当能够通过样例发现自己读错了题意。
  • 有多种操作的题,每种操作都应在样例中出现。有多种输出的题,每种可能的输出都应在样例中出现。
  • 如果提供大样例,可以在数据范围处用 markdown 的链接指向一个剪贴板或网盘,而非直接简单地粘贴到样例里面。

样例说明

  • 题目描述越复杂、越不易理解就越应当有详细的样例说明,题目难度越简单就越应当有详细的样例说明。一般来说,一道题至少应该有一个样例说明。

时限、空间限制与部分分

时限与空间限制的目的是卡掉复杂度错误的做法。尽可能保证单题评测极限情况总时间为以内。

因此,原则上时间限制应当选取不使错误做法通过的尽量大的值。

一般地,时限应满足以下要求:

  1. 至少为 std 在最坏情况下用时的三倍
  2. 不应使错误做法通过(实在卡不掉、想放某种错解过除外)。

部分分一般分为较小数据范围与特殊性质两种。

较小数据范围一般要设置多档,即使你想不到某种复杂度的做法,也可以考虑给这种复杂度一档分。一般来说,为了避免卡常,可以设置一档极限数据除以二的部分分。

“数据有梯度”最好用多档部分分替代。

特殊性质部分分的设置要依具体题目而定。理想的特殊性质部分分应当是能够引导选手思考正解的。与较小数据范围部分分不同,在你不会针对某种特殊性质的做法时,最好不要给这种特殊性质一档分。

Special Judge

写法规范参见如何在牛客网出Special Judge的编程题

  1. 你需要应对各种不合法的输出,因此,请检查读入的每个变量是否在合法范围中(readInt(minvalue, maxvalue))。例如:读入一个在 check 过程中会作为数组下标的变量时必须检查其范围,否则可能引发数组越界,有时这会导致 RE,有时则可能判为 AC。这一点,可以在polygon打包检查的时候检查到部分。我们建议使用polygon作为spj的辅助测试工具。
  2. 原则上 checker 中不应检查空白字符(即,不应使用 readSpace()、readEoln()、readEof(),值得一提的是,testlib.h 会自动检查是否有多余的输出)。

题解和标程

题解的目标是让可能来参加本次比赛的选手都能看懂题解,所以在对应不同难度水平下,也需要尽可能详尽。

标程中最好去掉冗余部分。比如,有人在题解中保留了完整的 define 模板(为了提高做题速度,包含大量 define 与常用函数,常用于 CF 等在线比赛),并且其中很大一部分都没有用到,这是不好的。

参考资料

  1. ouuan 的出题规范
  2. 洛谷主题库题目规范

规则

在以下情况下,Nowcoder有权拒绝支付部分或者全部出题费用:

一、提前向他人透露题意或解题思路并且被广为传播;

二、出错题,包括但不仅限于提供错误解法并最终发现题目不可做;

三、标程有错误且对比赛造成了影响;

最终解释权归Nowcoder所有。