Online Judge 评判结果分别表示什么意思?

Online Judge 支持哪些编程语言?

我的程序为什么不能编译通过呢?

使用 JAVA 语言有什么限制呢?

为什么有些题目不能提交呢?

Online Judge 评判结果分别表示什么意思?
当你提交的程序被Online Judge评判完毕后,你可以在“Status”页看到评判结果。
常见的Online Judge将评判结果分为如下几类:

Accepted (AC)
  你的程序完全通过了评判,你做对了该题。

Wrong Answer (WA)
  你的程序顺利地运行完毕并正常退出,但是输出的结果却是错误的。
  注意:有的题包含多组测试数据,你的程序只要有一组数据是错误的,结果就是WA。

Time limit Exceeded (TE)
  你的程序运行的时间超过了该题规定的最大时间,你的程序被Online Judge强行终止。
  注意:TE并不能说明你的程序的运行结果是对还是错,只能说明你的程序用了太多的时间。

Runtime Error (RE)
  你的程序出现了“运行时错误”。
  造成这种错误的原因有很多,主要原因有三条:
  一、数据下标越界,包括越上界和越下界。
  二、堆栈溢出,比如递归层数过多。
  三、不恰当的指针使用。

    另外,由于技术原因,在目前的SOJ中,如果你的程序超过了内存限制,也会被判为RE。

Compile Error (CE)
  你的程序没有通过编译。
  一般来说,这种错误主要是由gcc与你使用的本地编译器之间的差异造成的,因为没有人会将在本机都无法
    通过的程序提交。
	
Output limit Exceeded (OE)
  你的程序输出了太多的东西。
  Online Judge规定提交的程序在运行的时候只能输出1024K字节的东西,如果你输出太多,将导致此错误。
  我们保证所有的题目的标准输出都小于1024K字节。

Presentation Error (PE)
  你的程序输出的答案是正确的,但输出格式不对,比如多写了一些空格。
  不过,计算机程序是很难准确判断PE错误的,所以,很多PE错误都会被评判成WA。
Online Judge 支持哪些编程语言?
到目前为止,本 Online Judge 已经支持 C、C++、JAVA、PASCAL 四种编程语言
我的程序为什么不能编译通过呢?
Online Judge 使用了如下的命令来编译用户提交的 C/C++ 程序:

gcc -DONLINE_JUDGE --static -O -ansi -o foo foo.c -lm
g++ -DONLINE_JUDGE --static -O -ansi -o foo foo.cpp -lm

ANSI 标准和 Microsoft Visual C++ 存在一些不同的地方,比如:

1)  Microsoft Visual C++ 可以将 main 函数声明为 void,而 ANSI 中必须为 int
2)  对如下的语句
    for (int i=0; i<10; ++i) 
    { 
        ... 
    } 
    在 Microsoft Visual C++ 中,变量 i 在循环后仍然有效,而在 ANSI 中则相反
3)  itoa 不是一个 ANSI 函数
4)  stricmp 不是一个 ANSI 函数
使用 JAVA 语言有什么限制呢?
你必须按照一定的规则来编写 Java 程序才能被 Online Judge 接受:
1)  类名必须声明为 Main
2)  程序的入口必须声明为 main  (实际上就是编写一个 Java Application)
3)  可以在程序中定义其他类
4)  程序中不可以使用网络、本地文件、GUI、线程等资源

下面是一个解答题目 1001 的 Java 程序的例子:

import java.io.*;
import java.util.*;

public class Main
{
    public static void main (String args[]) throws Exception
    {
        BufferedReader stdin = 
            new BufferedReader(
                new InputStreamReader(System.in));

        for (; ; )
        {
            String line = stdin.readLine();
            if (line==null) break;

            StringTokenizer st = new StringTokenizer(line);
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            System.out.println(a+b);
        }
    }
}
为什么有些题目不能提交呢?
由于历史遗留原因,SOJ 对有些题目将不再提供评判服务。
这些题目将保留在题库中,但不能提交评判。