HUSTOJ SPJ 示例

article/2025/9/27 0:42:16

什么是 SPJ

SPJ 是 Special Judge 的意思。

什么时候使用 SPJ

当题目答案不止一个的时候,我们就必须使用 SPJ。

如何使用 SPJ

题目中打开 SPJ

首先,我们需要在出题的时候,增加 SPJ 选项,如下图所示。
在这里插入图片描述
题目保存后,就显示有 SPJ,如下图所示。
在这里插入图片描述

编写 SPJ 程序

SPJ 程序,也就是一个标准 C 或者 C++ 程序,根据题目的要求,读取测试文件(*.in),标准输出文件(*.out),用户输出文件(user.out),进行比较。
使用带参数输入。

SPJ 模板代码

//
#include <bits/stdc++.h>
using namespace std;
using LL=long long;
const int AC=0;
const int WA=1;int main(int argc,char *args[]) {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);//读取三个文件,注意 arg 顺序不能变ifstream f_in;f_in.open(args[1]); ifstream f_out;f_out.open(args[2]); ifstream f_user;f_user.open(args[3]); int ret=AC;
/**************自己写判题逻辑**************/
/************************************/f_in.close();f_out.close();f_user.close();return 0;
}

上传 spj.cc 到对应的题目目录

假设我们题目题号为 6387 6387 6387,那么对应的路径就是 /home/judge/data/6387。将 spj.cc 上传到对应目录,如下图。
spj.cc 文件名可以任意命名。
在这里插入图片描述

编译 spj 可执行文件

执行

g++ -o spj 6387_spj.cpp -std=c++14

这样我们就可以得到对应的可执行文件 spj。

修改所有者

将 spj 所有者改为 www-data。

sudo chown www-data:judge spj

权限设置好如下图。
在这里插入图片描述

设置可执行

sudo chmod +x spj

测试

自己建立一个 user.out 文件。

./spj sample.in sample.out user.out

查看执行结果

echo $?

如下图。
在这里插入图片描述
显示 0 0 0 表示结果正确。显示非零一般是 1 1 1 表示结果失败。

SPJ 编写样例

SPJ 编写的难度在于题目的逻辑判断。
我们使用 MYOJ 题号 6387 6387 6387 为例子。
该题是有向图的拓扑序列,就是给一个有向图,输出对应的拓扑序列。如果是一个 D A G DAG DAG 输出任意一个合理的序列,如果不是 D A G DAG DAG 输出 − 1 -1 1

情景分析

不是 D A G DAG DAG

我们应该输出 − 1 -1 1。用户可能有两种错误。
情况一:输出 − 1 2... -1\ 2 ... 1 2...。用户输出了 − 1 -1 1,但是也输出多个数据。
情况二:输出 − 2 -2 2。用户输出非 − 1 -1 1

D A G DAG DAG

我们读取用户的输出,然后根据拓扑排序的性质,对每个输出进行合法性分析。
用户可能有两种错误。
情况一:不是一个合法的拓扑排序。也就是输出到某个顶点 u u u 的时候,该顶点 u u u 的入度不为 0 0 0
情况二:用户输出了比 n n n 更多的顶点。

样例代码

//
#include <bits/stdc++.h>
using namespace std;
using LL=long long;
const int AC=0;
const int WA=1;const int N=1e5+10;
LL h[N], in[N];
LL ans[N];
const int M=2e5+10;
LL e[M], ne[M], idx;
LL que[M];
LL hh, tt;
LL n;void add(LL a, LL b) {e[idx]=b;ne[idx]=h[a];h[a]=idx++;//更新入度in[b]++;
}int main(int argc,char *args[]) {
#if 1ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#endififstream f_in;f_in.open(args[1]); ifstream f_out;f_out.open(args[2]); ifstream f_user;f_user.open(args[3]); int ret=AC;
/**************自己写判题逻辑**************/memset(h, -1, sizeof h);LL m;f_in>>n>>m;for (LL i=1; i<=m; i++) {LL a,b;f_in>>a>>b;add(a,b);}LL cnt=0; LL u;while (f_user>>u) {//cout<<"u="<<u<<"\n";++cnt;if (cnt>n) {return WA+6;}if (u>0) {if (in[u]!=0) {return WA+1;}//遍历u的所有边for (LL i=h[u]; i!=-1; i=ne[i]) {LL v=e[i];in[v]--;}    		} else if (u!=-1) {return AC+2;}}if (cnt!=n) {return WA+5;}/************************************/f_in.close();f_out.close();f_user.close();return 0;
}

http://chatgpt.dhexx.cn/article/i4Jq571S.shtml

相关文章

《数据库原理与运用》上机实验之SPJ

《数据库原理与运用》上机实验之SPJ 前言一、关系模式二、使用SQL语句创建、修改基本表1.对基本表字段名的增加2.对基本表字段名的增加3.索引 二、使用SQL语句对数据库表的单表查询1.对指定列的查询2.对表达式计算和改变表达方式的查询3.消除重复行的查询4.WHERE条件查询5.分组…

SPJ数据库查询

起始 SQL语句建表 建表 后续图示为在SQL Server Management Studio中快捷创建的&#xff0c;并不是代码创建的。 CREATE TABLE S ( SNO CHAR(2) UNIQUE, SNAME CHAR(6), STATUS CHAR(2), CITY CHAR(4));CREATE TABLE J (JNO CHAR(2), JNAME CHAR(8), CITY CHAR(4) ); CREATE …

二 DeepinV20版本安装

安装 https://www.deepin.org/zh/download/ 准备工作&#xff1a;一个U盘&#xff0c;4G就够&#xff1b;镜像包&#xff1b;老毛桃或是官网提供的启动工具。 分区规划&#xff1a;至少3个区&#xff0c; 一个挂 / &#xff08;建议至少10G&#xff09;, SWAP分区&#xff08…

Windows10+deepin双系统安装(选用意义,安装教程)

1.为什么选用deepin 为什么要选用deepin&#xff0c;想必能看到该篇文章&#xff0c;肯定知道deepin是linux系统&#xff0c;而linux系统的发行版众多&#xff0c;至于具体那些&#xff0c;又有什么区别&#xff0c;请读者参考https://blog.csdn.net/bernin/article/details/83…

Deepin安装NVIDIA显卡驱动

显卡驱动可以通过官方库安装&#xff0c;本文使用官方NVIDIA 驱动手动安装。 时间&#xff1a;2020.8 系统版本&#xff1a;Deepin v20 beta Nvidia驱动安装 1 下载驱动 进入NVIDIA官网下载Linux驱动&#xff1a;NVIDIA官网驱动下载 找到对应驱动后下载&#xff0c;记住下载位…

【系统 win10 deepin】双系统安装(win10和deepin双系统)

概述 所有的事情都源自于一只蝙蝠&#xff0c;在这个无聊且漫长的寒假&#xff0c;终于能够实现躺在家里也能为国家做出贡献的时候了。 既然闲着也是闲着&#xff0c;那为何不折腾一下自己的电脑呢。 相信很多猿在虚拟机里已经体验过linux系统&#xff0c;那么怎么在实体机上怎…

Deepin重装Win10

Deepin重装Win10 分享荣耀magicbook 8256 全盘安装deepin后&#xff0c;重装win10之旅。 如有需要请务必先看完再做&#xff01;&#xff01;&#xff01;会清除电脑硬盘上的全部数据&#xff01;&#xff01;&#xff01;请自行备份&#xff01;&#xff01; 重装win10系统我…

【Deepin】 Deepin 系统安装教程

安装过程 准备准备足够的磁盘空间下载格式化制作启动盘 安装设置U盘启动项根据引导安装新建分区 设置 记录一下第N次安装Deepin系统的过程。 准备 准备足够的磁盘空间 deepin用于生活日常的话&#xff0c;不需要太大的空间。我准备了40G左右的空间&#xff08;很小&#xff0…

国产操作系统Deepin的安装

一、简介 武汉深之度科技有限公司&#xff08;以下简称深度科技&#xff09;成立于 2011 年&#xff0c;是专注基于 Linux 的国产操作系统研发与服务的商业公司。 作为国内顶尖的操作系统研发团队&#xff0c;深度科技以提供安全可靠、美观易用的国产操作系统与开源解决方案为…

国产操作系统之深度deepin安装

一、深度deepin简介 Deepin(原名Linux Deepin)致力于为全球用户提供美观易用&#xff0c;安全可靠的Linux发行版。deepin项目于2008年发起&#xff0c;并在2009年发布了以linux deepin为名称的第一个版本。2014年4月更名为Deepin&#xff0c;在中国常被称为“深度操作系统“。深…

Deepin 20版 安装教程(Vmware)

最近一直关注着一个国产系统的动态&#xff0c;至今已经更新到20版&#xff0c;界面优美&#xff0c;体验绝佳&#xff0c;舒适度绝对不比Mac本差&#xff0c;基于Linux内核开发自研的国产系统&#xff0c;真的是细微之处&#xff0c;体验不凡&#xff01;欢迎试水。 软件的生态…

如何安装 Deepin 20.1深度操作系统(图文) ?

Deepin 深度操作系统是一个用户友好的基于 Debian 的 Linux 发行版。它是一个免费和开源的操作系统&#xff0c;主要用于桌面级别。最近&#xff0c;Deepin 20.1 的稳定版本已经发布。Deepin 20.1 附带了稳定的内核版本 5.4 和 Debian 10.6 包存储库。 系统要求 More than 2 …

Windows+Deepin双系统的安装(win11+deepin20.7.1)

WindowsDeepin双系统的安装&#xff08;win11deepin20.7.1&#xff09; 目录 [Win11deepin20的安装方法](https://blog.csdn.net/m0_53397118/article/details/121883445#%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0Win11%2Bdeepin20%E7%9A%84%E5%AE%89%E8%A3%85%E6%96%…

window+deepin双系统安装

说明 参考教程&#xff1a;https://baijiahao.baidu.com/s?id1662960328855347503 特别注意&#xff0c;最好用最新的PE工具&#xff0c;我用的 微PE。因为我弄过一次全盘安装&#xff0c;导致整个硬盘在PE工具中的diskgenius无法识别&#xff0c;最终为U盘安装最新版PE工具后…

win10下安装deepin双系统教程

1、右键电脑—>管理—>磁盘管理&#xff0c;选择空闲容量多的磁盘压缩50G空间。 2、登录网址下载镜像和U盘制作工具&#xff08;启动盘制作不懂自行百度&#xff09;。 3、U盘插入电脑重新启动&#xff0c;按F10&#xff08;每个电脑品牌不一样&#xff0c;可百度&#x…

深度操作系统deepin下载与安装教程-系统安装

前往深度社区&#xff08;deepin.org&#xff09;&#xff0c;下载deepin最新的镜像文件 下载Ventoy启动盘制作工具 插入U盘后安装Ventoy制作多系统启动U盘 安装完成后将deepin镜像文件拷贝到Ventoy多系统启动U盘 插入用Ventoy制作的deepin启动盘 按电源开机键之后狂按F12&…

Linux(Deepin)如何安装NVIDIA显卡驱动(deepin-Linux)

Windows系统中我们知道&#xff0c;装一个Windows下的NVIDIA驱动是多么容易&#xff0c;然而&#xff0c;在Linux下如何安装NVIDIA驱动是一件多么“快乐”的事。。。 1、驱动下载 首先进入NVIDIA官网下载Linux的闭源驱动&#xff1a;NVIDIA官网驱动下载 找到对应显卡的驱动&a…

win10PC上安装deepin深度Linux系统简易教程

今天突然刷到deepin系统的新闻&#xff0c;心血来潮&#xff0c;自己电脑上安装一个&#xff0c;说干就干&#xff0c;总共分这么几个步骤&#xff1a; 1、在win10建立磁盘分区&#xff0c;用于后面步骤 &#xff08;1&#xff09;右击<我的电脑>&#xff0c;点击管理 …

Deepin安装教程

安装教程 制作&#xff35;盘安装盘&#xff0c;优先使用deepin提供工具进行制作&#xff1a;下载地址deepin-boot-maker。支持的系统包括Windows&#xff0c;linux&#xff0c;还有MacOS。其中linux下的安装包&#xff0c;目前官方未提供&#xff0c;可能需要自己编译。如果本…

Deepin 深度操作系统安装教程

简介 深度操作系统(deepin)是一个致力于为全球用户提供美观易用、安全稳定服务的Linux发行版&#xff0c;同时也一直是排名最高的来自中国团队研发的Linux发行版&#xff0c;下面我们开始从下载镜像到安装系统一步步进行讲解。 系统下载 Deepin Desktop 20.3 AMD64 系统安装…