1. 项目地址

GitHub - iamwinter/LDUOnlineJudge: Online Judge | 程序设计在线评测系统

2. 情景描述

程序设计题有时答案不唯一,因此需要编写一个特判程序,对用户输出的答案进行鉴别,是否符合题意。special judge以下简称spj。下面用案例说明spj使用方法,出题人只需要修改judge函数。

下面的spj编写方法同时适用于hustoj,使用方法见文末。

3. 案例

【问题输出描述】

输出包含一个小数,要求用户输出的答案与标准答案的误差不得超过

【编写spj.cpp】

出题人须知:

  • 请在jduge函数中编写特判逻辑,出错代码return WA; 正确代码return AC; 不要修改judge函数之外的任何代码。
  • 请使用jscanf()读取数据,用法与fscanf相同,见代码。
  • 请使用标准输出(printf或cout)向参赛选手展示特判结果信息,该信息将在代码详情页面显示。也可以不输出任何东西,则参赛选手不会看到任何反馈信息。
#include<bits/stdc++.h>
using namespace std;#define AC 0
#define WA 1void jscanf(FILE *&fin, const char *format, ...) {va_list args;va_start(args, format);   /* 初始化变长参数列表 */int ret = vfscanf(fin, format, args);va_end(args);         /* 结束使用变长参数列表 */if (ret == EOF) {printf("When reading data, the program crashes because EOF is encountered in advance.\n");exit(WA);}
}bool is_whitespace(const char c) {return c == ' ' || c == '\t' || c == '\n' || c == '\r';
}//检查用户是否存在多余输出
int read_until_eof(FILE *&fp) {char ch = fgetc(fp);while (ch != EOF && is_whitespace(ch)) {ch = fgetc(fp);}if (ch != EOF) {printf("There is redundant content in user output\n");return WA;}return AC;
}int judge(FILE *&std_in, FILE *&std_out, FILE *&user_out);int main(int argc, char *args[]) {if (argc <= 1) {printf("Please enter the path of input file, output file, and contestant output file in turn:\n");for (int i = 1; i <= 3; i++) {args[i] = new char[100];scanf("%s", args[i]);}}FILE *in = fopen(args[1], "r");   //测试输入FILE *out = fopen(args[2], "r");  //测试输出FILE *user = fopen(args[3], "r"); //用户输出if (in == NULL)printf("No such a file with path %s\n", args[1]);if (out == NULL)printf("No such a file with path %s\n", args[2]);if (user == NULL)printf("No such a file with path %s\n", args[3]);int result = AC;if (!in || !out ||!user)result = WA;if (judge(in, out, user) != AC || read_until_eof(user) != AC)result = WA;fclose(in);fclose(out);fclose(user);return result;
}
/*************************** 以上内容请勿修改!!! ***********************//*************************** 请在下面的jduge函数体内编写特判逻辑! ***********************/
int judge(FILE *&std_in, FILE *&std_out, FILE *&user_out) {/*** std_in: 标准输入文件* std_out: 标准输出文件* user_out: 用户输出文件* 1. 请务必使用jscanf(FILE*, char*, ...)函数读取数据,用法与fscanf()相同* 2. 你可以使用标准输出(printf或cout)向参赛选手展示错误原因** 以下部分是特判程序,需要出题人根据题意去判断用户的答案是否正确。*/double i, a, b;//jscanf(std_in, "%lf", &i); //由于该案例的特判不使用输入数据,故无需从std_in读取数据jscanf(std_out, "%lf", &a);//读取标准答案jscanf(user_out, "%lf", &b);//读取参赛选手输出的答案if (fabs(a - b) > 1e-6) {printf("Your result is beyond the scope of the answer! \n");printf("The absolute difference between your result and the standard answer is %.9f\n", fabs(a - b));return WA;}printf("Yes\n"); //这句可以不写,仅提示选手通过了一组测试数据return AC;
}

【后台管理:添加/修改题目】

4. 本地测试

直接运行spj.cpp,然后分别输入三个文件的(相对/绝对)路径:【测试输入】、【测试输出】、【参赛选手输出】。

#. 附加:hustoj上传&编译方法

1. 在题目编辑页面设置spj为Yes。

2. spj.cpp编写方法与上方案例相同。将spj.cpp上传到测试数据文件夹。

3. 进入linux终端,编译spj.cpp。

cd /home/judge/data/题号/
g++ spj.cpp -o spj
chmod +x spj

LDUOnlineJudge特判程序 special judge (SPJ) 编写方法;HUSTOJ特判题目设置方法相关推荐

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

    2021.08.12更新:最新优化的编写方法请参见https://blog.csdn.net/winter2121/article/details/104901188 Special Judge 通常 ...

  2. Special Judge(特判程序)在OnlineJudge(在线判题系统)中的使用方法

    引言 最近搭了一个OnlineJudge,在一些比赛中,为了避免选手骗过测试,所以一个比较完善的OJ测试必须加上Special Judge 例如:题目要求:求a+b的值 测试用例: 输入1 2 输出: ...

  3. 【教程】如何正确的写一个Lemon/Cena的SPJ(special judge)

    Special Judge:当正确的输出结果不唯一的时候需要的自定义校验器 首先有个框架 #include<fstream> ifstream fin,fout,fstd ofstream ...

  4. Special Judge Ⅲ(这道题考的就是出栈序列判定_关键代码不差什么)

    Description Q:什么是 Special Judge,Special Judge 的题目有什么不同? A:一个题目可以接受多种正确方案,即有多组解的时候,题目就必须被 Special Jud ...

  5. UOJ的special judge写法

    UOJ的special judge写法 配置步骤 修改problem.conf chk.cpp 配置步骤 修改problem.conf 和传统题配置相比,spj的题区别就在于自定义了checker. ...

  6. c语言中fact函数怎么调用,C语言程序题: 1、编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现...

    点击查看C语言程序题: 1.编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现具体信息 答:int fac(int n) //非递归{int f=1; for(;n;) ...

  7. 安装jdk配置环境、cmd命令行测试环境变量配置是否正确及运行java程序、安装IDEA编写代码测试

    文章目录 1.安装jdk配置环境 2.cmd命令行测试环境变量配置是否正确及运行java程序 3.安装IDEA编写代码测试 1.安装jdk配置环境 首先打开官网Oracle https://www.o ...

  8. 程序详细设计之代码编写规范_我在不编写任何代码的情况下建立了一个设计策划网站

    程序详细设计之代码编写规范 It's been just over a month since MakeStuffUp.Info - my first solo project as an indep ...

  9. Java程序开发三步骤:编写、编译、运行

    1.Java语言跨平台原理 1.1Java虚拟机--JVM JVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的 运行 ...

  10. java 程序输出 赵_编写一个完整的JAVA的程序

    编写一个完整的JAVA的程序 关注:84  答案:1  mip版 解决时间 2021-02-05 08:43 提问者妳螚鬧俄螚笑 2021-02-05 02:59 1,接口Person Show()方 ...

最新文章

  1. 2022-2028年中国工业环保产业投资分析及前景预测报告
  2. 中如何构造有参和无惨_CAD制图初学入门:CAD机械软件中如何构造孔?
  3. umijs多环境配置_umi 项目多环境打包配置
  4. 一本书学会可视化设计 pdf_「读书」数据之美-一本书学会可视化设计
  5. Sql Group by 使用
  6. core data firing fault
  7. 【纪中集训2019.3.26】动态半平面交
  8. JavaScript对象的深入理解 (一)
  9. 报错,sql语句中尽量不要使用*,只查询需要的字段出来
  10. ASP.NET 5 WebApi 返回 HttpResponseMessage
  11. TCP连接吞吐率和线路效率的总结
  12. 马哥linux_linux自学!拥有15万粉丝的Linux专研者 带你0基础学习linux!
  13. ab压力测试及结果分析
  14. java截取视频的帧
  15. DH(Diffie-Hellman)算法本元根(原根)求法
  16. Windows 11中Edge选单看不清显示异常的解决办法
  17. 一个优秀的UI设计师必备的能力,你都有吗?
  18. 分子动力学开源分析软件MDAnalysis安装介绍及使用
  19. java 监控 emc 存储_EMC存储配置说明(转)
  20. UART串口通讯协议

热门文章

  1. 【贰】人生穷富的关键
  2. qt代码着呢么换行_离我睡觉还早着呢...
  3. 苹果计算机快捷键设置在哪里,苹果手机快捷键小方块怎么设置 【设置方法】...
  4. docker开启远程访问后,重启失败的解决方案
  5. C++程序设计技巧 NVI(Non-Virtual Interface )
  6. H. Zebras and Ocelots -ICPC North Central NA Contest 2017
  7. 线程类的一些常用方法
  8. C++读书笔记:多态
  9. C#:文本文件读写操作 FileHelper
  10. 嘉应大学黄林鑫计算机学院,嘉应学院土木工程学院团总支学生会招新方案