OJ搭建配置 功能速查手册

news2024/10/1 12:28:48

服务器配置

腾讯云 2H4G 5M 60GB 轻量应用服务器  承载大约 200~400人使用,经过压力测试,评测并发速度可满足130人左右的在线比赛。
系统镜像选 Ubuntu 22.04 LTS。

用户管理

一、批量导入(从方便管理角度建议以 学生姓名 作为 用户名 )

 用户数据导入仅支持csv格式的用户数据。

  1. 共七列数据:用户名和密码不能为空,邮箱、真实姓名、性别、昵称和学校可选填,否则该行数据可能导入失败。
  2. 第一行不必写(“用户名”,“密码”,“邮箱”,"真实姓名",“性别”,“昵称”,“学校”)这7个列名
  3. 性别为男请使用“male”或“0”,女请使用“female”或“1”,不填默认为“secrecy”。
  4. excel表格保存为 csv 文件 用记事本打开,另存为,保存为UTF-8编码的文件,否则中文可能会乱码。

 二、批量生成临时用户 后期修改成需要的用户名和密码 (学生登录后修改密码)

 

 三、用户自行注册(填写邮箱获取验证码)该方式不方便管理,建议使用前两种方式。

 四、 管理员角色说明

判题模式

一、普通判题

普通模式是程序在线评测平台(OJ)通用的判题模式,主要的实现逻辑步骤如下:

  1. 选手程序读取题目标准输入文件的数据

  2. 判题机执行代码逻辑得到选手输出

  3. 再将选手输出与题目标准输出文件的数据进行对比,最终得到判题结果

二、特殊判题

特殊判题(Special Judge)是指OJ将使用一个特定的程序来判断提交的程序的输出是不是正确的,而不是单纯地看提交的程序的输出是否和标准输出一模一样。

一般使用Special Judge都是因为题目的答案不唯一,更具体一点说的话一般是两种情况:

  • 题目最终要求输出一个解决方案,而且这个解决方案可能不唯一。
  • 题目最终要求输出一个浮点数,而且会告诉只要答案和标准答案相差不超过某个较小的数就可以,比如0.01。这种情况保留3位小数、4位小数等等都是可以的,而且多保留几位小数也没什么坏处。

用例模式

 

​ OJ的测试用例评测模式有以下几种:

​ ACM题目:默认(全部评测)、遇错止评(顺序评测)

​ OI题目:全部评测(得分加和)、子任务(最低得分)、子任务(平均得分)

一、ACM题目

1. 默认(全部评测)

​ 用户提交的代码将运行所有的测试用例,然后汇总结果。如果全部测试点都符合预期,则评测状态结果为Accepted,否则遍历所有测试点结果,将第一个非Accepted的测试点的状态作为最终结果。

2. 遇错止评(顺序评测)

​ 用户提交的代码将顺序运行所有测试用例,如果遇到某个测试点的结果(非Accepted)不符合预期,则评测结束,将该测试点的评测结果作为最终结果;否则一直遍历全部测试用例评测直至结束。

二、OI题目

1.全部评测(得分加和)

​ 用户提交的代码将运行所有的测试用例,然后汇总所有评测点的得分和结果。如果全部测试点都符合预期,则评测状态结果为Accepted,得分为该题目的满分;否则遍历所有测试点结果,加和所有测试点的得分,作为该评测的最终得分。

2. 子任务(最低得分)

​ 将全部测试用例按照配置的组数分成多个子任务评测组,每个子任务求该组测试点的最低得分,作为该子任务的得分,然后汇总加和所有子任务组的得分,作为该评测的最终得分。

题目管理

一、自己OJ题目导入导出

1. 导出题目

用于题目备份和迁移。点击选择需要的题目,便可以批量导出成一个zip压缩包,分别对应一个json格式的题目数据,一个对应名字的文件夹存放评测数据文件,具体的文件结构如下:

+-- problem_1000.json
+-- problem_1000
|   +-- 1.in
|   +-- 1.out
|   +-- ....
+-- problem_1001.json
+-- problem_1001
|   +-- 1.in
|   +-- 1.out
|   +-- ....

 

2. 导入本OJ题目

选择需要导入的题目数据zip压缩包,如果是自己做的题目需要批量导入请注意不要多一层文件夹进行压缩请保证题目json文件的名字与其对应的存放评测数据的文件夹名字一致。

 

二、导入QDUOJ、FPS格式的题目

  1. 请严格按照青岛oj的后台导出的压缩文件来上传。
  2. 请使用标准的FPS格式的题目数据文件(.xml)

 

三、导入其它OJ题目

(远程判题,题面拉取过来自动分类到对应题库,测试数据在对应服务器上,学员提交题目,远程判题并返回结果。)

导入HDU、Codeforces、POJ、GYM、AtCoder、SPOJ的题目,只需提供该题目的题号便可一键导入。

  • HDU和POJ的题号一般是 1000以上的数字
  • Codeforces和GYM的题号是1000A1000B、这种数字加大写英文字母的格式,具体请到https://codeforces.com (opens new window)查看
  • SPOJ的题号是大写英文字母,如TEST,具体请到https://www.spoj.com (opens new window)查看
  • AtCoder的题号是类似abc110_a这种格式,具体请到 https://atcoder.jp (opens new window)查看

添加方法:管理员进入后台,点击题目列表,添加远程OJ题目。

 然后添加上方的添加按钮,在弹出窗中选择OJ名字及题号,便可导入

准备工作:对应OJ注册账号,并在后台添加账号。 

 四、手动录入题目

 

上传题目测试用例数据可以选择手动输入、Zip文件上传两种方式

一、手动输入(平时老师出题或者录入教案中题目)

每次点击 添加用例 就可以手动填入该用例的输入与输出,该方式比较适合题目数据简单的,同时手动输入的题目数据将记录进数据库,下次对该题目进行修改可以直接获取,然后进行测试数据的修改,同时也会在服务器对应的 testcase 文件夹生成对应的文件。

 

二、文件上传(用于样例较多,或已经有单独题面和测试数据包)

对于普通题目,测试用例文件包括inoutanstxt四种扩展名

例如有两组测试用例,则对于普通题目测试用例的文件名分别为*.in, *.out(*.ans),或者*input*.txt, *output*.txt ,其他形式的文件后台均不识别。

压缩时,请将文件都放在压缩包的根目录,而不是包含在某一个文件夹中,比如正确的格式是:

├── 1.in          
├── 1.out
├── 2.in
├── 2.out

 然后压缩测试用例到一个zip中

注意:不要在这些文件外面套多一层文件夹,请直接压缩!!!

建议:尽量减少测试用例组数,这会一定程度上提高判题性能。日常练习测试样例在精不在多

 

 训练题单

 

训练分为公开训练私有训练,同时可自定义训练分类

两种训练其实都是题单功能,区别在于私有训练拥有记录榜单

1. 公开训练

  • 管理员可在后台添加公开权限的题目,同时能对题目进行排序。
  • 题目的所有用户提交情况以及用户自身对该题目的提交情况与题目列表的题目数据同步。

 

2. 私有训练

  • 管理员可在后台添加公开权限的题目,同时能对题目进行排序。
  • 题目的所有用户提交情况以及用户自身对该题目的提交情况与题目列表的题目数据同步。

公开训练的区别:

  • 非训练创建者和超级管理员访问私有训练需要对应的密码。
  • 超级管理员与训练创建者的题目提交情况不会计入记录榜单
  • 系统会同步普通用户对应训练题目的提交情况,生成对应的记录榜单。
  • 用户在进入私有训练后,只有在训练里面的题目提交,记录榜单才会继续更新记录。

系统同步用户对应题目数据的情况如下:

  • 后台管理员增加新的题目,系统会同步训练已成功访问的所有用户对应新题目的提交情况。
  • 后台管理员移除题目,系统会删除对应题目的榜单记录。

 用于留课后作业 可以方便看到每位学员题目完成情况。

 创建比赛

一、ACM 比赛模式

该模式是按照ACM-ICPC的比赛规则来进行,Contest设置项中的Seal Time Rank即为是否封榜,封榜后将不再刷新排名。可选择比赛结束前半小时,比赛前一小时,比赛全程封榜。

如果开启封榜,则封榜期间的角色不同如下:

  1. 封榜期间,超级管理员与比赛创建者不受影响,正常可查看题目统计数据,提交数据等,排行榜需自行开启强制刷新,同时提交结果可以及时看到评测结果,但不会纳入排行榜!
  2. 封榜期间,普通用户与非比赛创建者(包括其它管理员角色),可以及时看到自己的提交结果,但不可看到别人封榜后的提交,不能看到题目的统计情况,排行榜保持封榜前的排名数据。

注意:比赛一结束,默认所有数据变成正常显示,但后台可以设置比赛结束继续封榜!

 

 

二、OI 比赛模式

在OI模式下,选手的提交将根据得分点来计分,多次提交以最后一次提交或选择以最高得分的提交)为准,排名规则为多个题目的总分数。同样可以进行封榜操作,封榜时段,选手不能查看到实时的排行榜数据!

比赛一结束,默认所有数据变成正常显示,但后台可以设置比赛结束继续封榜!

比赛权限

  • 公开赛:所有用户都可以查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,且都可以在比赛阶段随时提交。
  • 保护赛:所有用户都可以查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,但在比赛阶段提交需要提供该比赛的密码!
  • 私有赛:仅支持有比赛密码的用户进入比赛,查看查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,包括提交。

 后台比赛题目列表管理页面如下:

 

团队(班级)功能

团队可以看做是一个独立的小OJ,里面包含了现有OJ的题目、训练、比赛、评测、讨论、公告、排名等功能,其中各个团队的数据与OJ主站的数据完全隔离,各个团队可以自定义属于自己的题目、比赛、训练等,支持团队中的题目申请公开到主题库。

团队分为公开团队、保护团队、私有团队

  • 公开团队:加入无需申请
  • 保护团队:加入需要申请
  • 私有团队: 需要邀请码才能申请加入

一、创建团队

以下限制只对 非 普通管理员、题目管理员、超级管理员的普通用户:

  • 每个用户创建团队的前提为通过20道题目

  • 每个用户每天可以创建的团队数量为2

  • 每个用户总共可以创建的团队数量为5

  • 以上数据为默认数量,可以通过开关设置修改,甚至禁止普通用户创建团队。

  • 用户在登录之后,便可以创建团队

  • 输入团队的名称、简称、简介、描述,选择权限和是否显示即可创建属于自己的团队
  • 二、加入团队

    用户登录后,点击指定的团队进入团队主页,点击右侧的申请加入即可加入团队。

  • 对于公开团队是直接加入,无需团队管理员审批!
  • 对于保护团队需要输入加入理由,等待团队管理员审批!
  • 对于私有团队需要输入正确的邀请码和加入理由,等待团队管理员审批!

    三、管理团队

团队角色分为:

  1. 申请中
  2. 申请被拒绝
  3. 普通成员
  4. 管理员
  5. 超级管理员(创建团队的Owner也是超管)

注意:主站的超级管理员与创建团队的Owner拥有同等最高权限,拥有解散团队的权限

  • 在团队比赛中:比赛创建者、团队超管、主站超管不纳入排行榜计算
  • 在私有训练中:比赛创建者、团队超管、主站超管不纳入记录榜单计算
  • 在团队信息中:团队Owner、主站超管才可以更新团队信息
  • 团队管理员、团队超级管理员、主站超管可以管理题目、管理训练、管理比赛、管理公告

目录

服务器配置

用户管理

一、批量导入(从方便管理角度建议以 学生姓名 作为 用户名 )

 二、批量生成临时用户 后期修改成需要的用户名和密码 (学生登录后修改密码)

 三、用户自行注册(填写邮箱获取验证码)该方式不方便管理,建议使用前两种方式。

 四、 管理员角色说明

​编辑

判题模式

一、普通判题

二、特殊判题

用例模式

一、ACM题目

二、OI题目

题目管理

一、自己OJ题目导入导出

1. 导出题目

2. 导入本OJ题目

二、导入QDUOJ、FPS格式的题目

三、导入其它OJ题目

(远程判题,题面拉取过来自动分类到对应题库,测试数据在对应服务器上,学员提交题目,远程判题并返回结果。)

 四、手动录入题目

一、手动输入(平时老师出题或者录入教案中题目)

二、文件上传(用于样例较多,或已经有单独题面和测试数据包)

 训练题单

1. 公开训练

2. 私有训练

 创建比赛

一、ACM 比赛模式

二、OI 比赛模式

比赛权限

团队(班级)功能

一、创建团队

​二、加入团队

三、管理团队

四、申请公开题目


团队管理员、团队超级管理员、主站超管可以点击团队内的题目管理,选择需要公开到主站题库的团队题目,点击申请即可。申请后,会发消息告知主站的超级管理员和题目管理员对题目进行审批,管理员则可以在后台进行审批,审批通过的团队题目则会加入到主题库中。

注团队题目的统计数据、用户的提交数据在团队内和主站中的数据是隔离的!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/485108.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全之黄金票据,白银票据

前言:今天来给大家讲讲黄金票据和白银票据Kerberos认证#金票Golden ticket# 原理#伪造金票的场景和所需条件#利用方式#银票SILVER TICKET# 原理#伪造银票所需条件#金票和银票的区别# 获取的权限不同#认证流程不同#加密方式不同# 前言:今天来给大家讲讲黄…

Unity 3D 学习笔记(1)

文章目录 1.Unity 3D 概述2.Unity的安装过程3.Unity 3D 的项目管理4.Unity 3D 中的场景5.Unity 3D 的界面组成 1.Unity 3D 概述 Unity 3D简介:Unity 3D是虚拟现实行业中使用率较高的一款开发引擎,由Unity Technology公司开发。通过Unity,开发…

手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】

目录 手动实现 Spring 底层机制【初始化 IOC容器依赖注入BeanPostProcessor 机制AOP】 前面我们实际上已经用代码简单实现了 代码演示使用框架 创建一个maven项目 创建UserAction类 创建UserDao类 创建UserService类 创建beans.xml 说明 创建AppMain类 运行效果 如图…

《汇编语言》- 读书笔记 - 第2章-寄存器

《汇编语言》- 读书笔记 - 第2章-寄存器 2.0 8086CPU 寄存器段地址:偏移地址 2.1 通用寄存器2.2 字在寄存器中的存储2.3 几条汇编指令表2.1汇编指令举例表2.2 程序段中指令的执行情况之一问题 2.1表2.3 程序段中指令的执行情况之二问题 2.2 2.4 物理地址2.5 16位结构的CPU2.6 8…

数据埋点1

文章目录 1 什么是数据埋点2 为什么需要数据埋点3 数据埋点能采集哪些用户数据4 数据埋点的分类及方式5 主流的数据上报技术5.1 客户端上报5.2 服务端获取 1 什么是数据埋点 互联网的海量数据是通过数据埋点技术采集用户行为数据而产生的,用户行为数据采集及上报流…

我又不当程序员还要学Python吗?人工智能AI的出现我知道,我错了

Python(可读音:派森) 时代要淘汰你,连招呼都不会打! 这句话近些年我们常在媒体上听到,有点残酷,但却又很现实。 最近,人工智能AI技术火爆全网,而且它所表现出来的“超…

浅谈Spring中的BeanFactory与FactoryBean

前言 理解FactoryBean是非常非常有必要的,因为在Spring中FactoryBean最为典型的一个应用就是用来创建AOP的代理对象,不仅如此,而且对理解Mybatis核心源码也非常有帮助!如果甘愿crud,做个快乐的码农,那我就哦…

Springcloud--docker快速入门

认识docker docker相关操作 1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署…

『Linux』第九讲:Linux多线程详解(三)_ 线程互斥 | 线程同步

「前言」文章是关于Linux多线程方面的知识,上一篇是 Linux多线程详解(二),今天这篇是 Linux多线程详解(三),内容大致是线程互斥与线程同步,讲解下面开始! 「归属专栏」Li…

剑指 Offer 54. 二叉搜索树的第k大节点【37】

难度等级:容易 上一篇算法: 226. 翻转二叉树【58】 力扣此题地址: 剑指 Offer 54. 二叉搜索树的第k大节点 - 力扣(Leetcode) 1.题目:剑指 Offer 54. 二叉搜索树的第k大节点 给定一棵二叉搜索树&#xff0c…

springboot第15集:MyBatis分页

我们在测试SQL的时候,要是能够在控制台输出 SQL 的话,是不是就能够有更快的排错效率? 是的,输出 SQL 可以帮助我们更好地理解代码的执行流程和结果。在控制台输出 SQL 可以让我们看到实际执行的 SQL 语句,这样就能够更…

武忠祥老师每日一题||定积分基础训练(一)

若积分区间相同,最常用的思想: 若 f ( x ) > g ( x ) , 则 ∫ a b f ( x ) > ∫ a b g ( x ) 若f(x)>g(x),则\int_{a}^{b}f(x)>\int_{a}^{b}g(x) 若f(x)>g(x),则∫ab​f(x)>∫ab​g(x) 但 是 往 往 等 号 只 是 在 有 限 个 点 成…

Java实现添加文字水印、图片水印功能

Java实现添加水印功能 添加水印Java 2D API介绍绘制文字水印绘制图片水印循环添加文字水印 添加水印 为图片添加水印的主要作用是保护图片版权,防止图片被未经授权的人使用或传播。为图片添加水印是一种常用的图片处理技术。在Java 中可以使用JDK自带的 Graphics2D …

快速上手Django(九) -Django下载文件、Django上传文件、Django实现excel导入导出

文章目录 快速上手Django(九) -django 上传文件request.FILES,下载文件一、Django下载文件1. Django下载文件方案和思路2. HttpResponse、StreamingHttpResponse和FileResponse区别和选择StreamingHttpResponse和FileResponse对象的对比和选择使用HttpResponse使用S…

浏览器安全之XSS跨站脚本

基本概念 跨站脚本(Cross-Site Scripting,XSS)是一种经常出现在Web应用程序中的计算机安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的。 攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端Javas…

采用.Net Core技术框架开发的B/S版区域检验管理系统(云LIS)

实验室信息管理系统云LIS源码 SaaS模式运维管理系统 云LIS系统源码是一款全面的实验室信息管理系统源码,其主要功能包括样本管理、检测项目管理、质控管理、报告管理、数据分析、两癌筛查等多个方面。具有独立的配套SaaS模式运维管理系统,支持远程运维&…

AtCoder Beginner Contest 300——A-G题讲解

蒟蒻来讲题,还望大家喜。若哪有问题,大家尽可提! Hello, 大家好哇!本初中生蒟蒻讲解一下AtCoder Beginner Contest 300这场比赛的A-G题! A - N-choice question 原题 Problem Statement Given integers A A A and…

数据埋点2

文章目录 1 数据埋点流程2 六个步骤实现数据埋点设计2.1 确认事件与变量2.2 明确事件的触发时机2.3 明确事件的上报机制2.4 设计数据表结构2.5 统一字段命名规范2.6 明确优先级 3 以电商购物成交转化为例实现数据埋点设计 作为数据分析师的你,是否和我一样经常会被业…

基于改进的离散PSO算法的FJSP的研究(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

排位赛结果“测谎”

甲乙丙丁说的关于排位赛结果只正确一半,根据甲乙丙丁说的信息求出正确的排位赛结果顺序。 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那…