COJ Online Judge FAQ

Q:这个在线裁判系统使用什么样的编译器和编译选项?
A:系统运行于Debian/Ubuntu Linux. 使用GNU GCC/G++ 作为C/C++编译器, Free Pascal 作为pascal 编译器 ,用 openjdk-7 编译 Java. 对应的编译选项如下:

C: gcc Main.c -o Main -fno-asm -O2 -Wall -lm --static -std=c99 -DONLINE_JUDGE
C++: g++ -fno-asm -Wall -lm --static -std=c++11 -DONLINE_JUDGE -o Main Main.cc
Pascal: fpc Main.pas -oMain -O1 -Co -Cr -Ct -Ci
Java: javac -J-Xms32m -J-Xmx256m Main.java
*Java has 2 more seconds and 512M more memory when running and judging.

编译器版本为(系统可能升级编译器版本,这里直供参考):
gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
glibc 2.3.6

Free Pascal Compiler version 2.4.0-2 [2010/03/06] for i386

java version "1.6.0_22"

Python默认的版本是Python 3;如果用Python 2编写,需要在首行加入 #!/bin/python2


Q:程序怎样取得输入、进行输出?
A:你的程序应该从标准输入 stdin('Standard Input')获取输入,并将结果输出到标准输出 stdout('Standard Output').例如,在C语言可以使用 'scanf' ,在C++可以使用'cin' 进行输入;在C使用 'printf' ,在C++使用'cout'进行输出.

用户程序不允许直接读写文件, 如果这样做可能会判为运行时错误 "Runtime Error"。

下面是 1281题的参考答案

C++:


#include <iostream>
using namespace std;
int main(){
    int a,b;
    while(cin >> a >> b)
        cout << a+b << endl;
	return 0;
}
C:

#include <stdio.h>
int main(){
    int a,b;
    while(scanf("%d %d",&a, &b) != EOF)
        printf("%d\n",a+b);
	return 0;
}
PASCAL:

program p1001(Input,Output); 
var 
  a,b:Integer; 
begin 
   while not eof(Input) do 
     begin 
       Readln(a,b); 
       Writeln(a+b); 
     end; 
end.


Java:

import java.util.*;
public class Main{
	public static void main(String args[]){
		Scanner cin = new Scanner(System.in);
		int a, b;
		while (cin.hasNext()){
			a = cin.nextInt(); b = cin.nextInt();
			System.out.println(a + b);
		}
	}
}

Q:为什么我的程序在自己的电脑上正常编译,而系统告诉我编译错误!
A:GCC的编译标准与VC6有些不同,更加符合c/c++标准:

Q:系统返回信息都是什么意思?
A:详见下述:

Pending : 系统忙,你的答案在排队等待.

Pending Rejudge: 因为数据更新或其他原因,系统将重新判你的答案.

Compiling : 正在编译.

Running & Judging: 正在运行和判断.

Accepted : 程序通过!

Presentation Error : 答案基本正确,但是格式不对。

Wrong Answer : 答案不对,仅仅通过样例数据的测试并不一定是正确答案,一定还有你没想到的地方.

Time Limit Exceeded : 运行超出时间限制,检查下是否有死循环,或者应该有更快的计算方法。

Memory Limit Exceeded : 超出内存限制,数据可能需要压缩,检查内存是否有泄露。

Output Limit Exceeded: 输出超过限制,你的输出比正确答案长了两倍.

Runtime Error : 运行时错误,非法的内存访问,数组越界,指针漂移,调用禁用的系统函数。请点击后获得详细输出。

Compile Error : 编译错误,请点击后获得编译器的详细输出。


Q:如何参加在线比赛?
A:注册 一个帐号或用给定的帐号登录系统-->修改昵称,“提交竞赛的昵称为学号姓名,组队参赛的,队员间以下划线作间隔!提交作业的,要用学号作为登录名注册,昵称为自己的姓名!-->点击“竞赛”菜单-->在出现的竞赛项目列表中找到准备参加的竞赛项目并点击进入-->在弹出的题目列表中找到要提交代码的题目并点击题目的标题-->在弹出页面中,点击“提交”链接-->在新的弹出页面中的Language列表框中选择使用的语言种类(注意不要选错)-->将代码粘贴在代码编辑框中-->点击页面下方的“提交”按钮即可!

注册时请勿使用纯数字作为账户的邮箱(如用QQ号作为帐号名的邮箱),否则找回密码功能会异常,如果找回密码没有收到邮件请查看是否在垃圾箱!

系统具有作弊检测功能,诚信光荣!

Q:virtual judge是什么?和普通的oj有什么区别?
A:详见下述:
所谓的Virtual Judge是区别于Online Judge而言的,OJ具有自己的题库、判题终端等等,但是VJ是没有的。VJ的工作原理是把题目用爬虫抓过来,当你用VJ的账号提交题目的时候VJ会用自己在对应的OJ上的账号来提交你的代码,并抓取判题结果呈现给用户。简单来说就是你只要注册一个账号就可以在各个OJ(当然要是VJ支持的)上提交题目了。 除此之外,VJ还有几个功能很棒:
创建比赛:可以用VJ支持的那些OJ上的题目来组成一场比赛,很适合大家一起做套题,或者个人刷专题使用。
实时排名:你可以按VJ说明的格式来生成一个比赛的排行榜,把这个榜和你创建的比赛挂钩之后就可以在比赛过程中实时地看到其他各个队伍的AC情况以及自己的排名。有些大型比赛的排行榜已经有人制作好了,你只需要在设置的时候直接勾选别人创建的排行榜(也就是“比赛回放”)就行了,不必再亲自制作。