如何在牛客网出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