Custom checkers


Hướng dẫn viết checker dùng testlib từ anh Phạm Văn Hạnh

Một số bài tập có thể có nhiều output đúng, vì vậy đôi lúc ta cần phải viết checker để kiểm tra xem output có đúng hay chưa.

1. Checker mặc định

VNOJ có hỗ trợ các checker mặc định của DMOJ, các bạn có thể xem ở đây.

2. Custom Checker (Python)

Xem tại đây.

3. Custom Checker (C++)

VNOJ cũng hỗ trợ các checker được viết bằng testlib.htestlib_themis_cms.h của anh Phạm Văn Hạnh, về checker này, các bạn xem hướng dẫn ở đầu trang.

Ví dụ

Chương trình sau dùng để chấm bài toán: Cho ~n~ là một số nguyên dương. In ra hai số tự nhiên ~a~, ~b~ sao cho ~a + b = n~.

Nếu in ra ~a + b = n~ và ~a, b \ge 0~ thì được ~100\%~ số điểm, nếu ~a + b = n~ nhưng một trong 2 số ~a, b~ âm thì được ~50\%~ số điểm.

Đây là checker được viết bằng testlib.h cho bài toán trên:

#include "testlib.h"

using namespace std;

int main(int argc, char* argv[]) {
    registerTestlibCmd(argc, argv);

    int n = inf.readInt();
    int a = ouf.readInt();
    int b = ouf.readInt();
    ensuref(a + b == n, "%d + %d != %d", a, b, n);
    if (a < 0) {
        quitf(_points, "0.5 \n a = %d < 0", a);
    }
    if (b < 0) {
        quitf(_points, "0.5 \n b = %d < 0", a);
    }
    quitf(_ok, "%d + %d = %d", a, b, n);
}