ACM介绍。

转载一篇ACM介绍的文章,对了解ACM的相关信息是非常有帮助的
原文: http://www.geektu.com/acm-online-judge-guide
最近很为 ACM 痴迷。于是在看 Introduction to Algorithms(2/e),另外也找了一些 Online Judge。
下面这篇文章大部分来自杨伟圣(Rick)的 BLOG( http://axp1.csie.ncu.edu.tw/~rick/acmguide/),主要讲述什么是  Online JudgeOJ)。兔子做了少量增删、修改。
 

- 什么是ACM Online Judge -

ACM 是  Association for Computing Machinery 的缩写,即美国计算机协会;而我们常说的 ACM,则是指 ACM/ICPC,即  International Collegiate Programming Contest,国际大学生程序设计竞赛。
ACM/ICPC 是世界上公认的规模最大、水平最高的国际大学生程序设计竞赛,其目的旨在使大学生运用计算机来充分展示自已分析问题和解决问题的能力。ACM 所颁发的获奖证书也为世界各著名计算机公司、各知名大学所认可。(Adapted from PKU Judge Online)
而 Online Judge,则是指一个在线的裁判系统,它可对程序源代码进行编译和执行,并 通过预先设计的测试数据来检验程序源代码的正确性

- 练习 Problem-Solving 的好处 -

很多人刚接触程序设计时,都抱着“我要写游戏”、“我要当黑客”之类的想法,但总是想一步登天。在对程序语言有了一点认识后,我都会建议他们去做 Problen-Solving 的练习,但真正有心要练习的实在是不多,他们的理由都是:“很无聊”, 不然就是“看不懂题目”。
的确,写 Problem-Solving 的程序,不能赚钱,不能有什么作品,在升学上也不能有什么明显帮助(哦,其实 ACM 名次很好的话,对升学很有帮助呢,^_^),但实际上,它可以训练你如何用计算机程序去解决一个 Problem,你可以把它想成是一种基础的练习,练习如何活用学到的程序语言,而且用得精湛,也可以练习程序运作的思考.当你磨练到一定的程度之后 (不需要很强),你就会发现,学校出的程序作业跟本难不倒你。
现在台湾广设大专院校,挂着信息 XX 系的系所的一大票(大陆何尝不是呢!),你要如何提升自己的竞争力,以及如何避免自己被取代?你要学的是思考问题,要有规划解决方法的能力,还有运用程序语言的能力。因此,一位优秀的 Programmer,他不一定精通各种程序语言,但他一定有着别人不能取代的能力。但别误会,这么说并不是鼓励各位不要学程序,而是建议各位要多下一点功夫,就学业上而言,写 Problem Solving 是学习 程序语言,程序设计,数据结构,算法,离散数学等等的助力,就整体信息技术上而言,是培养你思考及解决问题能力的好方法,是个一举数得的活动。信息技术有许许多多的领域,不一定每个领域都需要写程序;但把 Programming 的能力培养好,绝对是你走入各领域的一强大武器。

- 程序的输入与输出 -

UVA Online Judge(Rick 所举的例子)上所使用的 I/O 是标准输出输入装置,所以可以使用 C 语言的 scanf ( ) 、printf ( ) ,或是 C++ 上的 cin、cout 来读入及输出数据。
比较要注意的是:系统并不是用人工方式来 keyin 数据,所以 不必在意使用者界面的问题,也就是 不用印出像是“Please enter a number”之类的文字(机器看不懂;更严重的是,有这样的输出一定会被判为 WA �C Wrong Answer,下面详述)。

- 解题状态说明 -

常见的 Judge 结果:
Accept
程序的输出数据是正确的,也就是你成功地解出了这个问题。
Aceept(P.E.) (Presentation Error)
算是Accept(你的输出数据正确,但格式上有点小误差,例如多了一些空格或者空白行之类的)。
Wrong Answer
你的程序成功的执行结束,但输出的数据没有完全正确。
Time Limit Exceeded(TL)
目前 Judge 所限的时间是十秒(疑问:但是兔子所见到的一般都是 1000 ms 呢?),也就是你的程序在十秒后还没执行结束。
Memory Limit Exceeded (ML)
内存的使用量超过系统限制。
Output Limit Exceeded (OL)。
输出的数据太大,超过限制。
Compile Error (CE)
编译错误.系统是使用 Linux 架的,所以 C/C++ 的编译器当然就是 gcc 啦。
Submission Error (SE)
题号,使用者ID,使用语言没填好,系统无法得知相关信息。
Runtime Error(SIGSEGV)
程序编译正确,但执行时发生错误,通常是内存使用错误,像程序中除以 0,或是用到不可用的内存(比如存取超过范围的数组元素)。
Restricted Function (RF)
你的程序有使用到系统限制的函式(如开启档案),或system (…)。

- 常见的错误说明以及建议事项 -

程序部分
  • 你程序的输入输出格式要像 sample input/output 那样。常犯的错误是:忘记换行,少一个空格符等,都会被认定为Wrong Answer。
  • 不要做没有意义的输出,因为系统只看你的 output 正不正确,所以不要输出像“Please input a number”或之类的文字,否则一定 WA。
  • 要考虑到所有情形,比如数据的范围,使用的变量会不会溢位之类的。
  • 不要做题目没说明的假设,像是题目说给你整数,你就自行假设为正整数。
  • 要看清楚题目,别太直觉的以常理来判断结果。
题目的选择
  • 程序初学者在选题目时,可以先挑简单题来做。每个题目后面答题的正确率可以参考,越高的,一般性来说可能就是越简单的题目,这样就不会越写越没信心。
  • 参考中文翻译的网站,加速看题目的速度。
编译器的选择
  • 建议使用 GNU C/C++ Compiler,也就是俗称的 GCC/G++,而在 Windows 平台可以使用MinGW(可以想成是 Windows 上的 GCC),或是 Dev-C++(因为这个 IDE 是使用 MinGW 当作 Compiler),原因呢?一来因为 Judge 上的 C/C++ Compiler 就是 GCC,二来这个 Compiler 支持标准的 C++ 语法,三来它是免费的软件。
  • 除非你对C/C++语言的标准有相当的认知,否则不建议使用像是 Turbo C++ 3.x 或 Microsoft Visual C++ 6.0 这种老旧的Compiler。
 

你可能感兴趣的:(职场,休闲)