功能类似洛谷和信息奥赛一本通,支持CSP复赛中的freopen文件输入输出方式提交,模拟真实考试环境,防止出现 本地 AC 而比赛 WA PA TLE 爆零 的惨剧。
组织比赛作业,创建题目、查看用户提交代码、下载评测数据等都没限制。
约 800 精选 题,覆盖入门+进阶+算法+蓝桥杯+等级考试+CSP JS+NOIP比赛 。
demo:
https://oj.kycode.top/home
1、一本通基础篇 约 379 题
2、一本通提高篇 约 219 题
3、CSP-J/S NOIP复赛(第二轮)近20年真题 约200多题
(持续扩充中)
服务器配置需求
腾讯云 2H 2G 4M 60GB 轻量应用服务器 承载大约 200~300人使用,经过压力测试,评测并发速度可满足200人左右的在线比赛。
系统镜像选 Ubuntu 22.04 LTS ,没有桌面系统资源占用率很低。
【腾讯云】轻量新用户上云福利,2核2G4M 低至 65元/年 !
https://curl.qcloud.com/I6BJ49Ki
【阿里云】云服务器,新购续费均为99元 e实例2核2G 40G Entry云盘,3M带宽
https://www.aliyun.com/daily-act/ecs/activity_selection?userCode=xw6yrkqs
1、自动适配手机平板端屏幕大小,判题使用沙箱 cgroup 隔离用户程序,防止卡评和恶意代码攻击;
2、分布式判题,可以一台前端主机加多台评测机进行分流评测,可应对大规模比赛;
3、私有训练(班级)支持榜单 显示作业完成情况、公开训练(题单功能);
4、普通测评、特殊测评、交互测评、在线自测、子任务分组评测、文件IO( freopen 读写);
5、左题面右编程区的布局,支持在线自测调试;
6、拥有讨论区与站内消息系统,方便学员上传题解、交流解题思路;
模块 功能介绍
OJ界面展示
题目有标签,按标签选择练习题目或者组成训练题单和作业。
点开每一项在右侧伸展操作界面
1、修改首页底部文字 左侧 常用设置 ——系统配置
2、修改首页轮播图
3、修改填写获取注册邮件和发送验证码邮箱
点击上方“设置”、进入“账户”,开启SMTP,点击“生成新密码”,此密码即为授权码,填入OJ后台的【密 码】栏即可
如果OJ不开放注册可以不配置。
4、如何监控服务运行状态
共七列数据:用户名和密码不能为空,邮箱、真实姓名、性别、昵称和学校可选填,否则该行数据可能导入失败。
第一行不必写(“用户名”,“密码”,“邮箱”,“真实姓名”,“性别”,“昵称”,“学校”)这7个列名
性别为男请使用“male”或“0”,女请使用“female”或“1”,不填默认为“secrecy”。
excel表格保存为 csv 文件 用记事本打开,另存为,保存为UTF-8编码的文件,否则中文可能会乱码。
(填写邮箱获取验证码)该方式不方便管理,建议使用前两种方式。
逐字符对比
普通模式是程序在线评测平台(OJ)通用的判题模式,主要的实现逻辑步骤如下:
1、选手程序读取题目标准输入文件的数据
2、判题机执行代码逻辑得到选手输出
3、再将选手输出与题目标准输出文件的数据进行对比,最终得到判题结果
修改读写模式 为 文件IO ,填写指定的读写文件名。
IO模式题目左上角有明显标签,提示需要写的读写文件名。
未正确文件读写,自测无输入输出,且不能通过评测。
特殊判题(Special Judge)是指OJ将使用一个特定的程序来判断提交的程序的输出是不是正确的,而不是单纯地看提交的程序的输出是否和标准输出一模一样。
一般使用Special Judge都是因为题目的答案不唯一,一般是两种情况:
- 题目最终要求输出一个解决方案,而且这个解决方案可能不唯一。
- 题目最终要求输出一个浮点数,而且会告诉只要答案和标准答案相差不超过某个较小的数就可以,比如0.01。这种情况保留3位小数、4位小数等等都是可以的,而且多保留几位小数也没什么坏处。
OJ的测试用例评测模式有以下几种:
ACM题目:默认(全部评测)、遇错止评(顺序评测)
- 默认(全部评测)
用户提交的代码将运行所有的测试用例,然后汇总结果。如果全部测试点都符合预期,则评测状态结果为Accepted,否则遍历所有测试点结果,将第一个非Accepted的测试点的状态作为最终结果。
- 遇错止评(顺序评测)
用户提交的代码将顺序运行所有测试用例,如果遇到某个测试点的结果(非Accepted)不符合预期,则评测结束,将该测试点的评测结果作为最终结果;否则一直遍历全部测试用例评测直至结束。
1.全部评测(得分加和)
用户提交的代码将运行所有的测试用例,然后汇总所有评测点的得分和结果。如果全部测试点都符合预期,则评测状态结果为Accepted,得分为该题目的满分;否则遍历所有测试点结果,加和所有测试点的得分,作为该评测的最终得分。
- 子任务(最低得分)
将全部测试用例按照配置的组数分成多个子任务评测组,每个子任务求该组测试点的最低得分,作为该子任务的得分,然后汇总加和所有子任务组的得分,作为该评测的最终得分。
ACM赛制:每道题提交之后都有反馈,可以看到“通过”、“运行错误”、“答案错误”等等结果,但看不到错误的测试样例(leetcode周赛可以看到),每道题都有多个测试点,每道题必须通过了所有的测试点才算通过。每道题不限制提交次数,但没通过的话会有罚时,仅以最后一次提交为准。比赛过程中一般可以看到实时排名,通过题数相同的情况下按照答题时间+罚时来排名。
ACM赛制的比赛:ICPC、CCPC、codeforces比赛、leetcode周赛及全国编程大赛、牛客小白赛练习赛挑战赛、传智杯。
OI赛制:每道题提交之后都没有任何反馈,每道题都有多个测试点,根据每道题通过的测试点的数量获得相应的分数。每道题不限制提交次数,如果提交错误没有任何惩罚,仅以最后一次提交为准。比赛过程中看不到实时排名,赛后按照总得分来排名。
OI赛制的比赛:NOI全国青少年信息学奥林匹克竞赛、CCF CSP、考研机试、蓝桥杯、牛客OI赛、全国高校计算机能力挑战赛。
IOI赛制:每道题提交之后都有反馈,可以看到“通过”、“运行错误”、“答案错误”等等结果,甚至可以实时看到自己每道题得了多少分,但看不到错误的测试样例。每道题都有多个测试点,根据每道题通过的测试点的数量获得相应的分数。每道题不限制提交次数,如果提交错误没有任何惩罚,仅以最后一次提交为准。比赛过程中一般可以看到实时排名(如果是考试,一般看不到排名),按照总得分来排名。可以说,IOI赛制是结合了OI赛制和ACM赛制的特点。
IOI赛制的比赛:PAT、团体程序设计天梯赛、CCF CCSP、洛谷月赛。
1. 导出题目
用于题目备份和迁移。点击选择需要的题目,便可以批量导出成一个zip压缩包,分别对应一个json格式的题目数据,一个对应名字的文件夹存放评测数据文件,具体的文件结构如下:
2. 导入题目
请使用标准的FPS格式的题目数据文件(.xml) (单个文件超过510MB建议分割)
3、样例输入 样例输出
去掉支持语言前面的勾选,一般保留 c++ 和Python3, 在提交页面默认C++, 学生选择一次Python3提交后下次默认 Python3 ,可以切换改变。
一、手动输入(平时老师出题或者录入教案中题目)
每次点击 添加用例 就可以手动填入该用例的输入与输出,该方式比较适合题目数据简单的,同时手动输入的题目数据将记录进数据库,下次对该题目进行修改可以直接获取,然后进行测试数据的修改,同时也会在服务器对应的 testcase 文件夹生成对应的文件。
二、文件上传(用于样例较多,或已经有单独题面和测试数据包)
对于普通题目,测试用例文件包括in、out、ans、txt四种扩展名
例如有两组测试用例,则对于普通题目测试用例的文件名分别为*.in, .out(.ans),或者input.txt, output.txt ,其他形式的文件后台均不识别。
压缩时,请将文件都放在压缩包的根目录,而不是包含在某一个文件夹中,比如正确的格式是:
然后压缩测试用例到一个zip中
注意:不要在这些文件外面套多一层文件夹,请全选.in和.out文件,右键 添加压缩文件, 直接压缩。
建议:尽量减少测试用例组数,这会一定程度上提高判题性能。日常练习测试样例在精不在多。
oj是代码的自动评测,还无法实现选择题和判断题的评测,变通方式如下:
训练分为公开训练与私有训练,同时可自定义训练分类
两种训练其实都是题单功能,区别在于私有训练拥有记录榜单
管理员可在后台添加公开权限的题目,同时能对题目进行排序。
题目的所有用户提交情况以及用户自身对该题目的提交情况与题目列表的题目数据同步。
管理员可在后台添加公开权限的题目,同时能对题目进行排序。
题目的所有用户提交情况以及用户自身对该题目的提交情况与题目列表的题目数据同步。
与公开训练的区别:
非训练创建者和超级管理员访问私有训练需要对应的密码。
超级管理员与训练创建者的题目提交情况不会计入记录榜单
系统会同步普通用户对应训练题目的提交情况,生成对应的记录榜单。
用户在进入私有训练后,只有在训练里面的题目提交,记录榜单才会继续更新记录。
私有训练的做题记录和评测记录在主题库不体现,实现题目保密和用户数据隔离。
系统同步用户对应题目数据的情况如下:
后台管理员增加新的题目,系统会同步训练已成功访问的所有用户对应新题目的提交情况。
后台管理员移除题目,系统会删除对应题目的榜单记录。
用于留课后作业 可以方便看到每位学员题目完成情况。
该模式是按照ACM-ICPC的比赛规则来进行,Contest设置项中的Seal Time Rank即为是否封榜,封榜后将不再刷新排名。可选择比赛结束前半小时,比赛前一小时,比赛全程封榜。
如果开启封榜,则封榜期间的角色不同如下:
封榜期间,超级管理员与比赛创建者不受影响,正常可查看题目统计数据,提交数据等,排行榜需自行开启强制刷新,同时提交结果可以及时看到评测结果,但不会纳入排行榜!
封榜期间,普通用户与非比赛创建者(包括其它管理员角色),可以及时看到自己的提交结果,但不可看到别人封榜后的提交,不能看到题目的统计情况,排行榜保持封榜前的排名数据。
注意:比赛一结束,默认所有数据变成正常显示,但后台可以设置比赛结束继续封榜!
打星用户:不参与比赛排名。
在OI模式下,选手的提交将根据得分点来计分,多次提交以最后一次提交(或选择以最高得分的提交)为准,排名规则为多个题目的总分数。同样可以进行封榜操作,封榜时段,选手不能查看到实时的排行榜数据!
比赛一结束,默认所有数据变成正常显示,但后台可以设置比赛结束继续封榜!
比赛权限
公开赛:所有用户都可以查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,且都可以在比赛阶段随时提交。
保护赛:所有用户都可以查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,但在比赛阶段提交需要提供该比赛的密码!
私有赛:仅支持有比赛密码的用户进入比赛,查看查看比赛详情、比赛题目、比赛提交,比赛排行榜、比赛讨论等,包括提交。
后台比赛题目列表管理页面如下:
教师在从公共题库中选择题目当作比赛题目时需要注意:大部分题目均有 “题解AC程序”,从公共题库选择后需要修改题目:
操作如下:先将选手程序前面的对勾 点取消,待比赛结束后,再勾选恢复。
比赛结束后,可以 csv 电子表格 格式导出比赛成绩和 图片形式 保存榜单。
深绿色为运行用时最短的记录。
团队可以看做是一个独立的小OJ,里面包含了现有OJ的题目、训练、比赛、评测、讨论、公告、排名等功能,其中各个团队的数据与OJ主站的数据 完全隔离,各个团队可以自定义属于自己的题目、比赛、训练等,支持团队中的题目申请公开到主题库。
团队分为公开团队、保护团队、私有团队
公开团队:加入无需申请
保护团队:加入需要申请
私有团队: 需要邀请码才能申请加入
以下限制只对 非 普通管理员、题目管理员、超级管理员的普通用户:
每个用户创建团队的前提为通过20道题目
每个用户每天可以创建的团队数量为2个
每个用户总共可以创建的团队数量为5个
以上数据为默认数量,可以通过开关设置修改,甚至禁止普通用户创建团队。
用户在登录之后,便可以创建团队
输入团队的名称、简称、简介、描述,选择权限和是否显示即可创建属于自己的团队
管理员把 团队名称 告诉用户,用户登录后,点击指定的团队进入团队主页,点击右侧的申请加入即可加入团队。
对于公开团队是直接加入,无需团队管理员审批!
对于保护团队需要输入加入理由,等待团队管理员审批!
对于私有团队需要输入正确的邀请码和加入理由,等待团队管理员审批!
三、管理团队
团队角色分为:
申请中
申请被拒绝
普通成员
管理员
超级管理员(创建团队的Owner也是超管)
注意:主站的超级管理员与创建团队的Owner拥有同等最高权限,拥有解散团队的权限
在团队比赛中:比赛创建者、团队超管、主站超管不纳入排行榜计算
在私有训练中:比赛创建者、团队超管、主站超管不纳入记录榜单计算
在团队信息中:团队Owner、主站超管才可以更新团队信息
团队管理员、团队超级管理员、主站超管可以管理题目、管理训练、管理比赛、管理公告
团队管理员、团队超级管理员、主站超管可以点击团队内的题目管理,选择需要公开到主站题库的团队题目,点击申请即可。申请后,会发消息告知主站的超级管理员和题目管理员对题目进行审批,管理员则可以在后台进行审批,审批通过的团队题目则会加入到主题库中。
团队题目的统计数据、用户的提交数据在团队内和主站中的数据是隔离的!
四、团队中添加训练(从公共题库或者团队题库添加题目)
找到创建的 训练 ,点右侧 查看训练题目列表
点击 从公共题库添加题目 或者 从团队题库添加题目
通知和公告发布
通知和公告都仅有超级管理员可操作
通知是系统消息通知,每个小时推送一次到用户的站内消息系统
按照以下步骤完成
阿里云域名购买:
https://wanwang.aliyun.com/domain/
阿里云服务器购买
https://www.aliyun.com/daily-act/ecs/activity_selection?userCode=xw6yrkqs
腾讯云域名
https://buy.cloud.tencent.com/domain
腾讯云服务器:
https://curl.qcloud.com/wzcZLsgZ
国内服务器需要备案访问,在阿里云或腾讯云注册好域名后,点击ICP备案上传资料进行备案,通常要花1~2个月进行备案。
阿里云ICP备案中心
https://beian.aliyun.com/
腾讯云备案中心
https://cloud.tencent.com/product/ba
国外和香港服务器不需要ICP备案,如果是个人搭建不需要考虑备案,但如果是公司、机构搭建,建议完成ICP备案。
https://console.upyun.com/register/?invite=HJhFD5bSD
可以成为 upyun大使,每年有60多的代金劵,已实测不用花钱就可服务几百个学生。
如果OJ服务几百人以上,一年50元即可。
先充50,看流量再确定。