#19. 如何为题目配置 hack
如何为题目配置 hack
当前没有测试数据。
为一道题目配置hack很简单,需要分别配置 checker
(检查程序是否正确) 和 validator
(检查样例是否合法)。
有关于这部分的内容请参照 testlib 配置。
下面,我们以 A+B problem 为例,进行 hack 配置。
首先,创建一道题目,正常上传样例。 如果无误,那么评测设置的页面中 yaml 应该和这样类似。
type: default
subtasks:
- score: 100
id: 1
type: sum
cases:
- input: 1.in
output: 1.out
然后配置 checker :
温馨提示,testlib 对格式的要求很严格(精确到字符)
#include "testlib.h"
int main(int argc, char** argv) {
registerTestlibCmd(argc, argv);
int a = inf.readLong();
inf.readSpace();
int b = inf.readLong();
int ans = ouf.readLong();
inf.readEof();
ouf.readEof();
if (a + b == ans)
quitf(_ok, "ok"); // 这代表你的代码运行正确
else
quitf(_wa, "wa"); // 这代表你的代码运行错误
return 0;
}
以及 validator :
#include "testlib.h"
int main() {
registerValidation();
int a = inf.readLong();
inf.readSpace();
int b = inf.readLong();
inf.readEof();
// 不需要返回什么,只需要按照样例读入一遍,检查有没有超范围就行
// 因为如果格式错误会直接返回
return 0;
}
在 config.yaml
里加上
type: default
time: 1s
memory: 256m
checker_type: testlib
checker: checker.cc
validator: validator.cc
subtasks:
- score: 97
id: 1
cases:
- input: 1.in
output: 1.out
- score: 3
id: 2
cases:
- input: 1.in
output: 1.out
# hack会自动附加到这里
然后就可以正常使用 hack 了,在他人递交的代码处会有一个 hack 按钮,你只需要给入输入,当你的 hack 成功后,它会自动被加到 subtask #2
里面,并对通过的所有用户进行评测。