如何在牛客网出Special Judge的编程题
普通编程题的录入可以直接hr.nowcoder.com后台网页上操作。
为了让编程题支持Special Judge(以下简称spj),我们需要加入一个spj的判断代码。
spj代码里有三个文件可以读取,分别是
"output":测试数据的out文件
"input":测试数据的in文件
"user_output": 执行用户代码的输出文件
OJ系统通过spj程序的返回值来判定用户代码的正确性,return 0代表程序正确,return 1代表程序错。
假设我们出了一个编程题如下:
给定一个正整数n,请打印输出任意一个小于n的奇数
很显然这个题目的答案不是唯一的,我们需要进行spj,这个题目的c++ spj如下
java spj如下
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(new File("input"));
Scanner userOutput = new Scanner(new File("user_output"));
int n = input.nextInt();
int ans = userOutput.nextInt();
if(ans < n && ans % 2 == 1){
System.exit(0);
}
System.exit(1);
}
}
python spj如下
input = open('input')
n = int(input.readline().strip())
input.close()
user_output = open('user_output')
ans = int(user_output.readline().strip())
user_output.close()
if ans < n and ans % 2 == 1:
exit(0)
exit(1)
写完spj代码以后命名为checker.cc ,文件名必须为checker,其他语言如python的spj文件命名为checker.py,python3的spj文件命名为checker.py3, java的为checker.java
然后和测试数据放在一个目录里压缩打包为zip
通过后台的批量上传传到出题系统,点击全部替换,上传刚刚的压缩包,解析成功后如下,再点击审核入库,进行验题
验题通过后保存就可以了,注意如果是spj的代码在验题页面的左上角是有spj标记的
牛客的spj也无缝支持CF的testlib.h
其他单行浮点spj例子 https://static.nowcoder.com/b/double-checker.cc