Skip to content

Sjtu OnlineJudge Wiki v2.0

Zhou Fan edited this page Sep 22, 2018 · 12 revisions

Sjtu Online Judge 使用手册

第一部分 学生使用

1.0 关于OJ

Sjtu Onlinejudge(acm.sjtu.edu.cn/onlinejudge)是一个在线的评测系统。系统提供了大量的题目供使用者练习编程能力与算法技巧。另外系统也有完善的比赛与作业系统供日常教学、比赛选拔所用。用户需要提交题目的由程序语言实现的解法,由评测系统进行自动地评测之后给出评测的结果。

1.1 关于输入输出

由于系统采取无人工的机器评测,用户提交程序的输入输出格式必须与题目中描述的输入输出格式完全一致才能被判对,用户不能随意地输出多余无用的信息。另外,评测系统所接纳的程序应采用标准输入输出,一切企图读入服务器上其他文件的请求将被评测系统拒绝。

1.2 使用语言

目前在线评测系统提供3种语言供用户选择,包括C、C++、Java,用户在提交程序的时候必须选定使用哪一种语言。要注意不要使用一些编译器的特性,这样会导致用户所提交的程序在用户自己的编译环境中能正确运行,但是在评测系统上运行错误。目前评测系统采用的编译器版本为:

gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4

g++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4

java version "1.6.0_36"
OpenJDK Runtime Environment (IcedTea6 1.13.8) (6b36-1.13.8-0ubuntu1~14.04)
OpenJDK 64-Bit Server VM (build 23.25-b01, mixed mode)

~~Python 2.7.6~~ (Python support is broken now.)

1.3 关于评测

评测系统在接受了用户提交的程序之后会开始评测,页面将自动跳转至评测状态。用户可以在评测记录的顶端看到自己提交的记录,上面显示了程序运行的结果、程序最后的得分(满分为100分)、程序运行所用的时间(程序运行的时间限制通常均为1s,特殊情况会在题目描述中说明)、以及程序运行所消耗的内存。用户可以点击记录栏中的评测结果一栏看到详细的评测结果,其中包括每一个数据点所用的时间、内存以及最后的结果,还有提交程序的源代码。

其中各类评测结果的意义如下:

Judging 评测中

Accepted 正确

Wrong Answer 答案错误

Runtime Error 程序运行错误

Compile Error 程序编译错误

Time Limit Exceeded 程序运行超过时间限制

Memory Limit Exceeded 程序运行超过内存限制

1.4 关于比赛、作业界面

使用者作为学生可以参与教学指定的比赛和作业。在比赛或者作业界面中可以找到自己想要参加的比赛然后点击“确认参赛”的按钮进行确认。作业与比赛的界面分为几个部分,首先是比赛的起止时间、比赛的进度,然后是比赛所包括的题目,用户可以点击相应的题目按钮进入。Q&A的栏目可以在比赛和作业过程中进行提问。最后有一个排名表,分别记录了每一个参赛选手每一道题目的情况、通过题目的数量、罚时以及总的得分。对于每一道题目的记录,如果显示为绿色代表已经通过,其中第一行的数字代表时间,第二行的数字代表提交的次数。如果该题没有通过但是有提交记录,则显示为红色,并且只显示提交的次数。

1.5 P1000的样例程序

#include <stdio.h>

int main(void) {
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d", a + b);
    return 0;
}
#include <iostream>
using namespace std;

int main(void) {
    int a, b;
    cin >> a >> b;
    cout << a + b;
    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        int b = in.nextInt();
        System.out.println(a + b);
    }
}
print sum(map(int,raw_input().split()))

第二部分 助教使用

2.1 添加题目

网页端没有添加题目的途径,需要将题目所需文件按照以下所述格式打包后由管理员上传。

2.1.1 题目文件夹格式规范

题目文件夹示例:1000的题目文件夹

每道题目的目录结构为:

/题目文件夹
	/data
		1.in
		1.out
		2.in
		2.out
		...
	problem.conf
	problem.text
	solution.cpp  

problem.conf为题目参数配置文件,其中参数意义说明如下:

  • title: 填写题目名称,支持中英文,请避免使用特殊符号如“&”、空格、括号等。
  • author: 题目作者,支持中英文,同样请避免使用特殊符号。
  • case_count: 测试数据数目。
  • case_score: 每个测试数据评测通过的得分。
  • time_limit: 程序运行每个测试数据的时间限制,单位为ms。
  • memory_limit: 程序运行的空间限制,单位为kB。
  • secret_before: 在此时间前题目被隐藏,格式为YYYY-MM-DD HH:MM:SS。

另外请特别注意problem.conf文件应为utf-8编码。

problem.text为题目描述,使用markdown语法。

solution.cpp为题目标准答案程序,使用标准输入输出。
data/文件夹中为测试数据,输入数据文件名为*.in,输出文件文件名为*.out。其中,测试数据从1开始编号。测试数据数目应与problem.conf的case_count参数一致。

2.2 管理 Dashboard

拥有权限的助教登陆之后可以看到有一个管理的界面(Dashboard)。其中包括以下几个元素:

2.2.1 显示/隐藏/更新题目 Show/Hide/Refresh Problem

助教在管理比赛的时候可以在比赛前隐藏题目,开考之后显示题目。如果题目需要作修正更改,则可以选择更新题目。输入相对应的题目的ID并且选择相应的操作即可。

2.2.2 重新评测某条记录 Rejudge Record

助教可以在评测状态中看到所有的评测记录,其中的第一栏是评测的记录号。填入记录号,后可对改记录进行重新评测(当前一条评测结果出现问题的情况下)。

2.2.3 人工给分 Manually Judge Record

助教可以以人工的方式给某条评测记录进行给分,给分将覆盖机器评测的分数(当前一条评测结果出现问题的情况下)。

2.2.4 创建一场比赛或作业 Create Report

比赛或作业都是一场Report,助教填入Report名称、是否可见、起止时间、比赛所包含题目的ID即可顺利地创建一场Report。 若Report的title中包含“作业”或"Homework"则将创建一次作业,否则将创建一场比赛。可在user list中写入参加学生的用户名,则这部分用户将自动加入这场Report。也可以将user list留空,则用户可手动加入这场Report。

2.2.5 显示/隐藏/删除比赛 Show/Hide/Remove Report

助教可以选择某一个已有的比赛后进行显示、隐藏的操作,同时也可以选择删除不需要的比赛。

Current Admin's Contact: zhou.fan@sjtu.edu.cn