Q:我的程序要在哪里输入和输出数据?
A:你的程序必须从stdin(基本输入)读入数据并且从stdout(基本输出)输出数据. 例如,你使用C语言的话,使用scanf输入数据,使用printf输出数据,使用C++语言的话,还可以使用cin和cout读入输出数据。
请注意,你不能进行任何文件的读写操作,否则会返回错误"
Restrict Function Call"。
Q:评测服务器的性能怎样?
A:正常情况下,在我们OJ的1000题上使用GNU C++编译器提交以下代码,评测结果为使用时间接近1秒。
#include<stdio.h>
int main()
{
int a,b,i;
while(scanf("%d%d",&a,&b)!=EOF)
printf("%d\n",a+b);
for(i=0;i<450000000;++i) ++a;
return 0;
}
Q:本OnlineJudge提供哪些编译器?编译环境是怎么样的?
A:本OJ目前提供Microsoft Visual C/C++、GNU C/C++、Free Pascal、Java等编译器,它们的编译参数是:
GNU C:
gcc Main.c -o Main.exe -ansi -fno-asm -w -lm --static -DONLINE_JUDGE
C++:
g++ Main.cpp -o Main.exe -ansi -fno-asm -w -lm --static -DONLINE_JUDGE
Free Pascal(FPC):
fpc Main.pas -oMain.exe -Co -Cr -Ct -Ci -dONLINE_JUDGE
Microsoft Visual C:
cl Main.c -FeMain.exe -F8388608 -nologo -EHsc -MP1 -w -DONLINE_JUDGE
Microsoft Visual C++:
cl Main.cpp -FeMain.exe -F8388608 -nologo -EHsc -MP1 -w -DONLINE_JUDGE
Java:
javac -J-Duser.language=en Main.java
我们的服务器运行在Windows NT平台下,提供的编译器的版本分别是:
Gcc/G++ Version 3.4.5 (mingw special)
Free Pascal Compiler Version 2.2.4 [2009/04/10] for i386
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Java SDK Version 1.6.0_12
Q:为什么我得到了CE?而在我的电脑上运行的很好?
A:不同的编译器之间有一些语法的差异,请使用相应的编译器进行提交。
另外,我们的OJ对编译器所使用的资源有所限制,限制是:CPU时间5秒,内存使用128MB,如果你使用的编译器在编译你的程序时超过这个资源限制,将被判为CE。
Q:有些题目上面有“Special Judge”是什么意思?
A:Special Judge是指本题可能有多个正确的解。你的程序的答案将被一个SPJ的检测程序检测,以判断你的程序是否正确。请注意:SPJ的题目一般不会判出PE,所以请确保你的程序输出格式正确。
Q:我要怎么使用64-bit整形?
A:在C/C++和Pascal语言中,你可以用以下方法使用64-bit整形:
-
有符号64-bit整形,取值范围为:-9223372036854775808 到 9223372036854775807。
语言 |
GCC/G++ |
Pascal |
VC/VC++ |
类型名称 |
long long |
int64 |
__int64 long long |
输入方法 |
scanf("%I64d", &x); cin >> x; |
read(x); |
scanf("%I64d", &x); cin >> x; |
输出方法 |
printf("%I64d", x); cout << x; |
write(x); |
printf("%I64d", x); cout << x; |
-
无符号64-bit整形,取值范围为:0 到 18446744073709551615。
语言 |
GCC/G++ |
Pascal |
VC/VC++ |
类型名称 |
unsigned long long |
qword |
unsigned __int64 unsigned long long |
输入方法 |
scanf("%I64u", &x); cin >> x; |
read(x); |
scanf("%I64u", &x); cin >> x; |
输出方法 |
printf("%I64u", x); cout << x; |
write(x); |
printf("%I64u", x); cout << x; |
Q:OJ返回的结果分别是什么意思?
A:以下是OJ可能返回的结果和其意义:
Accepted | OK! 你的程序是正确的。 |
Presentation Error | 你的输出结果是正确的,但格式不正确,可能是你多输出或少输出了空格、Tab(\t)、换行(\n)等,请检查你的程序输出。 |
Wrong Answer | 你的程序输出的结果不正确。 |
Time Limit Exceed | 你的程序尝试使用超过题目限制的时间,可能是你的程序内存在死循环或者你的程序的算法效率太低。 |
Memory Limit Exceed | 你的程序尝试使用超过题目限制的内存。 |
Restrict Function Call | 你的程序尝试使用不允许的系统API,请注意,打开任意文件将被判为RFC。 |
Runtime Error | 你的程序发生了运行时错误。可能是由于除于0、内存访问违规等运行时问题。 |
Compile Error | 你的程序不能通过编译,请点击该结果可以查看编译器提示。 |
Output Limit Exceed | 你的程序的输出超过了系统限制。请检查你的程序是否存在死循环问题。目前系统的限制是8MB。 |
Judging |
你的程序正在评测当中,请稍候。 |
Queuing | OJ正在评测其它用户的提交,请你稍等片刻。 |
System Error |
未知错误,如果有该评测结果,请及时联系管理员。 |
注意:对于Java语言,有极少部分可能将RFC与RE判成WA。
Q:1000题怎么解答?
A:以下是1000题的各种语言的参考程序:
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语言:
var
a,b:integer;
begin
while not eof do begin
readln(a,b);
writeln(a+b);
end;
end.
Java语言:
import java.io.*;
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);
}
}
}