这个在线裁判系统使用什么样的编译器和编译选项?

OJ判题端local运行于Debian8系统,现支持如下语言:

语言 编译器 版本 编译参数
C GNU GCC/G++ 4.9.2 gcc Main.c -o Main -fno-asm -O2 -Wall -lm --static -std=c99 -DONLINE_JUDGE
C++ g++ Main.cc -o Main -fno-asm -O2 -Wall -lm --static -DONLINE_JUDGE
Pascal Free Pascal 2.6.4 fpc Main.pas -o Main -O1 -Co -Cr -Ct -Ci
Java sun-java-jdk 1.8.0 javac -J-Xms32m -J-Xmx256m Main.java
Python python.org 2.7/3.4 python -c import py_compile; py_compile.compile(r'Main.py')

*Java在题目时限的基础上有2秒额外时间和512M额外内存(但仍不推荐竞赛选手使用Java作为主训练语言)。

*Python默认使用3.4版本。

推荐在代码前声明Python版本:

如需使用python2编译,请在代码前加入#!/usr/bin/python2

如需使用python3编译,请在代码前加入#!/usr/bin/python3

如何使用这个系统?
  • 请先注册 一个帐号
  • 问题页寻找感兴趣的问题
  • 根据题目要求在本地编译器中写出程序并测试完毕
  • 点击题目页中的提交按钮,选择所写语言粘贴代码并提交
  • 状态页查看判题结果
  • 如需参与训练计划可查看训练
  • 如需参与竞赛可查看竞赛
程序怎样取得输入、进行输出?

你的程序应该从标准输入stdin('Standard Input')获取输出 并将结果输出到标准输出stdout('Standard Output')

例如:

在C中可以使用scanf进行输入,使用printf进行输出。

在C++可以使用cin进行输入,使用cout进行输出。

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

下面是一个简单的A+B题的参考答案:

C:

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

C++

#include <iostream>
using namespace std;
int main(){
    int a,b;
    while(cin >> a >> b)
        cout << a+b << endl;
	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);
        }
    }
}

Python

import sys
for line in sys.stdin:
    a = line.split()
    print int(a[0]) + int(a[1])
为什么我的程序在自己的电脑上无误,而提交却无法通过?

GCC的编译标准与VC6有些不同,更加符合c/c++标准

  • main函数必须返回int, void main的函数声明会报编译错误。
  • i在循环外失去定义for(int i=0...) {...}
  • itoa不是ansi标准函数.
  • __int64不是ANSI标准定义,可以使用long long声明64位整数。
    如果需要使用__int64,试试提交前加一句#define __int64 long long

也有可能是因为算法或程序有误,OJ判题较为严格,请勿只考虑样例。

系统返回信息:

状态 中文 解释
Pending 等待 系统忙,你的答案在排队等待
Pending Rejudge 等待重判 因为数据更新或其他原因,系统将重新判你的答案
Compiling 编译中 正在编译
Running & Judging 运行并评判 正在运行和判断
Accepted 正确 程序通过
Presentation Error 格式错误 答案基本正确,但是格式(空格、换行等)不对
Wrong Answer 答案错误 答案不对,仅仅通过样例数据的测试并不一定是正确答案,一定还有你没想到的地方
Time Limit Exceeded 时间超限 运行超出时间限制,检查下是否有死循环,或者应该有更快的算法
Memory Limit Exceeded 内存超限 超出内存限制,数据可能需要压缩,检查内存是否有泄露
Output Limit Exceeded 输出超限 输出超过限制,你的输出比正确答案长了两倍
Runtime Error 运行错误 运行时错误,非法的内存访问,数组越界,指针漂移,调用禁用的系统函数。请点击后获得详细输出
Compile Error 编译错误 程序无法编译,请点击后获得编译器的详细输出
More
  • @苏草合编写OJ入门
  • 其他问题可访问HPUOJ-BBS
  • 对OJ系统有意见或建议可发邮件到BoilTask@qq.com