跳转至

Validator

Validator,即校验器。当你造好了一道题的数据,感觉有点虚,担心数据不合法(不符合题目的限制条件):上溢、图不连通、不是树……你便需要 Validator 来帮助你检查数据是否合法。

即便你非常有自信,也最好用 Validator 检查一下,比较稳妥。所有 Codeforces 上的题目都必须要有 Validator,Polygon内建了对 Validator 的支持。

使用 Testlib 写 Validator 是很方便的。

请在阅读下文前先阅读通用。(然后就没什么可说的了)

示例

以下是100541A - Stock Market的 validator:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "testlib.h"

int main(int argc, char* argv[]) {
  registerValidation(argc, argv);
  int testCount = inf.readInt(1, 10, "testCount");
  inf.readEoln();

  for (int i = 0; i < testCount; i++) {
    int n = inf.readInt(1, 100, "n");
    inf.readSpace();
    inf.readInt(1, 1000000, "w");
    inf.readEoln();

    for (int i = 0; i < n; ++i) {
      inf.readInt(1, 1000, "p_i");
      if (i < n - 1) inf.readSpace();
    }
    inf.readEoln();
  }

  inf.readEof();
}

真香,基本不会写出 bug。

更多示例可以在GitHub中找到。

Warning

Validator 是非常严格的,它需要保证有正确的空格或换行。例如当你读入一个整数时,当前流指针位置为一个空格后接一个整数,Testlib 仍将抛出错误。

本文翻译自Validators with testlib.h - Codeforcestestlib.h 的 GitHub 存储库为MikeMirzayanov/testlib


评论