首页 > 编程语言 >HUSTOJ特判程序Special Judge使用方法整理

HUSTOJ特判程序Special Judge使用方法整理

时间:2023-05-29 11:32:54浏览次数:54  
标签:输出 题目 fscanf HUSTOJ 特判 argv spj Judge include




Special Judge

通常的ACM题目包括以下几项内容:题目描述(Description)、输入描述(Input)、输出描述(Output)、样例输入(Sample Input)、样例输出(Sample Out),在后台则包括测试输入(Input Data)和测试输出(Output Data)两项。在评测用户提交的程序正确与否时,系统会将样例输入和测试输入重定向作为程序的标准输入,通过判断程序对应的输出是否与期待的输出完全相同,来判断解答是否正确。

对于同一道题目,用户可能使用各种不同的方法来解答,所以对于某些特殊的题目,其结果可能不唯一,但都符合题目要求。此类题目就需要进行特判(Special Judge)。HUSTOJ便提供了特判功能。

这些题目主要有两种:
1、答案不唯一。
2、控制精度。题目要求输出精度误差在某eps之内。

【使用方法】

第一步,在添加题目时,Special judge勾选Y,以打开系统的特判命令。

HUSTOJ特判程序Special Judge使用方法整理_#include

第二步,编写spj代码,模板中标注了spj代码区域,自行根据题目要求编写。注意文件名最后以.cc为后缀。

【模板】控制精度为例,对比输出文件和用户结果文件,误差不超过1e-5则Accepted。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<set>
#include<utility>
using namespace std;

int main(int argc, char* argv[]) {
    
    FILE * f_in=fopen(argv[1],"r");//测试输入
	FILE * f_out=fopen(argv[2],"r");//测试输出
	FILE * f_user=fopen(argv[3],"r");//用户输出
	int ret=0; //AC=0,WA=1
	
	/*****spj代码区域*******/
	int T,n;
	fscanf(f_in,"%d",&T);
	while(T--)
	{
		double a,b;
		int n;
		fscanf(f_in,"%d",&n);
		fscanf(f_out,"%lf",&a);
		fscanf(f_user,"%lf",&b);
		if(fabs(a-b)>1e-5) //WA 
		{
			ret=1;
			break;
		}
	}
	
	/*****spj-end********/ 
	
    fclose(f_in);
    fclose(f_out);
    fclose(f_user);
    return ret;
}

【模板解释】

HUSTOJ的spj用了命令行参数argc和argv,其中argv[1]指向输入数据(即题目测试输入),argv[2]指向输出数据(题目测试的输出数据,有时不需要),argv[3]指向用户提交的程序所运行输出的文件。分别读取三个文件,做相应的对比。main函数的返回值表示判断结果。 当发现用户的输出文件有误时,return 1;  完全正确时,return 0;

注意读取三个文件时全部用fscanf(C++中fstream库操作也是可以的),读取出来后,只需要自己编写一下如何判断用户的输出是否正确。  可能有些题目很难,不好编写,这时候可以把标程放在spj区域(注意输入都改成fscanf),对比标程运行出来的结果和用户结果的差异是否在题目允许范围之内,来判断用户是否正确。

第三步,将.cc文件上传到服务器对应题目的数据文件夹下(也就是保存测试数据的那个文件夹),可以在上传数据时一同上传

第四步,在服务器上测试数据文件夹下,命令行执行   g++ -o spj spj.cc    (spj是编译后的可执行程序,不要改名。spj.cc是你上传的代码文件,名称随意),个别服务器可能还需要权限,再执行一下:chmod +x spj 

第五步,测试。该步骤可省略。在上一步的命令行中,继续执行:./spj data.in data.out user.out  ,然后再执行:echo $?

第六步,提交代码测试题目。建议提交一遍正确代码,再故意改动一下AC代码,提交错误代码,看是否成功WA。

标签:输出,题目,fscanf,HUSTOJ,特判,argv,spj,Judge,include
From: https://blog.51cto.com/u_16125110/6369258

相关文章

  • Pjudge #21680. 【PER #3】运算符 2
    一道很有教育意义的题目。首先我们有众所周知的AND卷积和XOR卷积,容易证明不同位互不干扰,拼起来可以获得\(1+4+5\)分的高分!接下来我们按照\(1\)的个数来讨论:\(0\)个\(1\):将这一位赋值为\(0\)即可。\(1\)个\(1\):如果形如0001那么就和AND卷积是一样的,那如果......
  • UVa 489 Hangman Judge (模拟&字符串匹配)
    489-HangmanJudgeTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=show_problem&problem=430In``HangmanJudge,''youaretowriteaprogramthatjudgesaseriesofH......
  • 【NOI OpenJudge】【1.4】编程基础之逻辑表达式与条件分支
    01:判断数正负#include<cstdio>#include<iostream>usingnamespacestd;intmain(){intn;cin>>n;if(n>0){printf("positive\n");}elseif(n==0){printf("zero\n");}else{pri......
  • 【NOI OpenJudge】【1.2】编程基础之变量定义、赋值及转换
    01:整型数据类型存储空间大小#include<cstdio>intmain(){ inta;shortb; printf("%d%d",sizeof(a),sizeof(b)); return0;}02:浮点型数据类型存储空间大小#include<cstdio>intmain(){ floata;doubleb; printf("%d%d",sizeof(a),sizeof(b)); return......
  • 【NOI OpenJudge1789】算24(搜索)
    problem给定4个数,加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。问是否存在一种方式使得得到的表达式的结果等于24。solution正常的中缀表达式枚举和计算难度都约等于0,麻烦的是括号的枚举和处理。这里只要求满足的结果,所以换一种方式拿掉括号——打乱顺序即可(括号的用......
  • Vjudge 3.14 训练解题报告
    比赛传送门\(\color{white}{password:3.1415926}\)A.Fibonacci-ish题意:定义一个序列为“Fibonacci-ish”的,当且仅当对任意\(2<i\len,a_i=a_{i-1}+a_{i-2}\)。给定......
  • HUSTOJ后台文件上传文件大小限制修改
    1.首先根据提示,到Ubuntu系统平台相关目录下找到php.ini,修改相应变量值。2.正常情况下,设置后可以实现大文件上传。3.若依旧出现413RequestEntityTooLarge,则需要修改N......
  • HUSTOJ后台公告KindEditor编辑器中文件上传类型限制修改
    1.进入Ubuntu系统,/home/judge/src/web目录2.搜索找到KindEditor文件夹3.进入PHP文件夹,打开upload_json.php4.按照提示找到限制上传文件类型的代码,添加相应文件扩展名即......
  • OpenJudge702 Crossing River过河问题
    题目链接:702:CrossingRiver题目大意为有n个人要过河,船最多乘两个人,给出每个人乘船时间,两人乘船时间由更慢者决定。求过河最短时间。有t组数据,输入数据组数t,对于每组数据,......
  • 1000 - 熟悉一下Online Judge的环境
    题目描述请不要笑。用来适应环境的题目,自然比较简单些。计算 2 个整数的和,这两个整数都在 1 到 100 之间。输入输入只有一行,包括 2 个整数 a , b ,......