关于验证我想说

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

[[TracNav(TOC)]]

1. 题目挂到ZOJ 2.0的Group Area里后,作者先去交遍标程确认没错并且TL合适(里面的TL都设成10倍),其他人有空都可以写程序去验证 

2. 验证主要包括描述是否清晰、输入和描述是否一致、输出的正确性。一般情况下不指定专门的验证人,大家自由验证。验证的人发现某部分有错后就在Problem那贴里回复,作者改好后也回复说明。确认没错后也回复说明。(都分描述/输入/输出三个部分) 

3. 验证可以使用比较差的算法,甚至是人工验证,只要保证正确性就行 

4. 验证还需要考虑是否存在多解以及spj正确与否,内存和时间是否合理,不过这个应该一眼就能知道的 

5. 为保证题目的质量,每条题都必须有人验证过才能挂在最终比赛里

6. 验证的时候,检查数据是很重要的一块,题目数据有问题是要被bs的,数据范围和描述不符也是,那么,验证的时候该如何检查数据呢? 

 可以写一个check.cc来提交题目,验证数据的正确性。其中使用类似assert函数来判断读入的数据范围是否和题目描述的范围相等。另外还有一些输入数据的特性也需要判断,必须distinct,odd,prime等等。 

 下面是例子可以参考一下:

{{{
#!cpp
#include <cstdio>
#include <cstring>
#include <cassert>

void go(int n)
{
   assert(1 <= n && n <= 12);
   char str[123];
   while (scanf("%s", str) != EOF && strcmp(str, "End") != 0) {
      assert(strcmp(str, "Watashi") == 0 || strcmp(str, "Kimi") == 0);
   }
   assert(strcmp(str, "End") == 0);
}

int main()
{
   int n;
   while (scanf("%d", &n) != EOF) go(n);
}
}}}

1. 题目挂到ZOJ 2.0的Group Area里后,作者先去交遍标程确认没错并且TL合适(里面的TL都设成10倍),其他人有空都可以写程序去验证

2. 验证主要包括描述是否清晰、输入和描述是否一致、输出的正确性。一般情况下不指定专门的验证人,大家自由验证。验证的人发现某部分有错后就在Problem那贴里回复,作者改好后也回复说明。确认没错后也回复说明。(都分描述/输入/输出三个部分)

3. 验证可以使用比较差的算法,甚至是人工验证,只要保证正确性就行

4. 验证还需要考虑是否存在多解以及spj正确与否,内存和时间是否合理,不过这个应该一眼就能知道的

5. 为保证题目的质量,每条题都必须有人验证过才能挂在最终比赛里

6. 验证的时候,检查数据是很重要的一块,题目数据有问题是要被bs的,数据范围和描述不符也是,那么,验证的时候该如何检查数据呢?

可以写一个check.cc来提交题目,验证数据的正确性。其中使用类似assert函数来判断读入的数据范围是否和题目描述的范围相等。另外还有一些输入数据的特性也需要判断,必须distinct,odd,prime等等。

下面是例子可以参考一下:

#include <cstdio>
#include <cstring>
#include <cassert>
void go(int n)
{
   assert(1 <= n && n <= 12);
   char str[123];
   while (scanf("%s", str) != EOF && strcmp(str, "End") != 0) {
      assert(strcmp(str, "Watashi") == 0 || strcmp(str, "Kimi") == 0);
   }
   assert(strcmp(str, "End") == 0);
}
int main()
{
   int n;
   while (scanf("%d", &n) != EOF) go(n);
}