[Login|Register]
News

Statistics

Search users

F.A.Q.

Read news
USTC Online Judge攻略
2013-03-04 17:36:14

Online Judge对于想要感受ACMICPC的同学是一个非常重要的的平台,下面就来一起走近Online Judge。

Level1. Online Judge初窥

Online Judge系统(简称ONLINE JUDGE)如其名字所言,是一个在线的评测系统。用户可以在线提交自己的程序源代码,系统对源代码进行编译和执行,并且通过服务器上的测试数据来检验程序源代码的正确性。

用户提交的程序在ONLINE JUDGE上进行评测时将会受到运行时间、内存使用和安全限制等。ONLINE JUDGE将用户程序的执行结果交给裁判程序,裁判程序比较用于的输出数据也标准输出的差别,返回给用户状态、程序使用的内存及运行时间等信息。

常见的状态有如下几种:

1、    通过(Accepted, AC)

2、    答案错误(Wrong Answer, WA)

3、    超时运行时间(Time Limit Exceed, TLE)

4、    超过输出限制(Output Limit Exceed, OLE)

5、    超过内存限制(Memory Limit Exceed, MLE)

6、    运行时错误(Runtime Error, RE)

7、    输出格式错误(Presentation Error, PE)

8、    编译错误(Compile Error, CE)

Online Judge系统最初适用于ACMICPC国际大学生程序设计竞赛和OI信息学奥林匹克竞赛中的自动判题和排名。现广泛应用于世界各地高校学生程序设计的训练、参赛队员的训练和选拔、各种程序设计竞赛以及数据结构和算法的学习和作业的自动提交判断中。

 

Level2. Online Judge之到此一游

使用Online Judge的流程大致是寻找题目、编写程序源代码(可以在自己的IDE上,当然也可以只用文字编辑器或者直接把代码写在Online Judge的提交框里)、在Online Judge上提交自己的源代码和向Online Judge提交源代码进行评测。

在更加深入地学习Online Judge的使用之前,不妨先在USTCONLINE JUDGE上注册账号并且通过一道A+B问题吧。

题目链接:

http://acm.ustc.edu.cn/ustcoj/problem.php?id=1000

USTCONLINE JUDGE的FAQ页面:

http://acm.ustc.edu.cn/ustcoj/faq.php

 

Level3. Online Judge之返回状态一览

下面是几个有关于ONLINE JUDGE的小小问题。

1、    能不能离线做题呢?

源代码的编写可以在任何时候进行。不过在源代码编写完成后一定要在ONLINE JUDGE上提交并且查看结果(至于为什么将在下面提到)。

2、    有没有中文版的ONLINE JUDGE?

答案是否定的。USTCONLINE JUDGE上有一部分题目是中文的,但是绝大部分是英文题目。ACMICPC的正式比赛从网络赛、区域赛到世界总决赛都是纯英文环境,所以几乎所有ONLINE JUDGE都是英文的。其实仔细想想,英文也没那么可怕,题目看多了自然就适应了,而且四六级也水过去了。

3、    样例输入输出的程序都通过了,为什么提交后不能得到AC呢?

题目中附带的样例输入输出只是供参考输入输出格式的,并不是全部的测试数据。测试数据相比于样例数据往往数据范围更大,测试数据数量也要多得多。所以通过了样例输入输入只是AC的必要条件,不是充分条件。

4、    怎么进行输入输出

参见Online Judge的FAQ页面。

对于大部分Online Judge(包括USTCOJ),是不需要进行文件输入输出的。只要把OJ当做所有输入时键盘输入,所有输出时输出到屏幕就可以了。

具体输入输出的格式可以参见题目描述和样例输入输出。

5、    出现了CE(RE、MLE、TLE、PE……)该怎么办呢?

常见的错误原因缩写可以参见Online Judge的FAQ页面。

CE表示编译错误,在Online Judge上的运行结果中可以查看编译错误的具体原因。

RE表示运行时错误,出现的可能原因有很多。校队有位同学曾说,“RE就是程序干了不该干的事情”,这句话着实精辟。RE发生的常见原因有以下几种:数组开的不够大出现了溢出,递归层数过多导致栈溢出,无效的指针带来的运行时错误等。

MLE表示超过内存限制。细心的你应该已经注意到了每到题目上都有一行“Memory Limit: 65536kb”,这就是题目对应的内存限制。入门的时候程序提示MLE往往是由于数组开得过大造成的。其实通过65536kb可以轻松算出来程序里可以开多大的数组的,没有概念的同学不妨试试吧。

TLE表示运行时间超过限制。每道题也有相应的“Time limit”限制,如果程序运行时间超过了这个限制就会产生TLE。一般来说可能是因为某些地方出现了死循环、无限递归,或者是算法不够优导致了运行时间过长。可以检查一下程序对边界情况、极限情况的处理,或者仔细想想程序的时间复杂度是不是可以在时间限制内得到运行结果。

PE表示格式错误。如果你得到了PE,恭喜你,你已经离AC很接近了。PE出现的情况往往是输出格式的小错,例如多了少了空格和换行,检查一下这些细节再进行提交吧。

看完了这些问题的回答,想必你已经对ONLINE JUDGE的各返回状态有了初步的理解,可以试着在ONLINE JUDGE上AC几道题。下面是通过人数较多的几道题。

1、USTCONLINE JUDGE-1001 Easy or not

http://acm.ustc.edu.cn/ustcoj/problem.php?id=1001

2、USTCONLINE JUDGE-1046 A*B Problem

http://acm.ustc.edu.cn/ustcoj/problem.php?id=1046

 

Level4. Online Judge之使用进阶

恭喜进入第四关。完成到这里,如果你已经通过了三个题目,想必对Online Judge的理解已经提升了不少。

下面来一起点一点USTC online Judge上的一些你可能还没试过的地方。

Problem页面,左边侧栏分别是Problems、Status与Rank。Status中为最近的评测记录,在这里可以按照不同方式对评测记录进行查找。Rank为ONLINE JUDGE的英雄榜,按通过题目数量列出了英雄ID,想要排名靠前的话就多在USTCONLINE JUDGE上AC些题吧!

Contest页面中有USTCONLINE JUDGE上办过的所有比赛列表,可以查看这些比赛的情况。比赛的题目在Problems列表中也都有,可以在Problems中选择题目并且完成AC,与比赛中的虚拟英雄们一决高下。

Forum页面是USTCONLINE JUDGE的BBS,一些关于比赛的赛后信息如解题报告将在这里贴出,当然还有新闻榜、题目讨论区和灌水区。

 

Level5. Online Judge之大神之路

这一关其实不算什么攻略,权当算作结语吧。

在初步了解了online Judge之后,也许你还有很多疑问,关于ONLINE JUDGE或是关于ACM或是关于你自己。有一条非常重要的原则是,“在问任何问题之前,请先询问搜索引擎”,就像很多BBS的置顶帖都在强调使用查找功能的重要性一样。许多爱好ACMICPC的同学都在网络上写过很多文章,关于自己的参赛历程、参赛感想和解题心得,这些都是值得参考的非常好的资料,几乎可以回答你的所有的客观问题。

关于ACMICPC的入门指导网络上也可以找到很多,

“路漫漫其修远兮,吾将上下而求索”。

“千里之行,始于足下”。

你懂的。

University of Science and Technology of China
Online Judge for ACM/ICPC
Processed in 1.8ms with 1 query(s).