荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: hoist (hoist), 信区: ACMICPC
标  题: ACM在线答题(Online Judge)初学者起步
发信站: 荔园晨风BBS站 (Tue May  9 19:20:22 2006), 站内

昨天看到一篇不错的文章,翻译过来给和我一样的初学者共享
原文地址:http://www.geocities.com/acmbeganer/anupamb.htm (要用代理访问)

ACM在线答题(Online Judge)初学者起步
作者:Anupam Bhattacharjee
孟加拉国立大学工程和技术学院 计算机科学系
Department Of Computer Science & Engineering
Bangladesh University of Engineering and Technology

(本文是面向ACM在线答题的参与者)

●学习一门程序语言

假如你想参与在线答题,那么很重要的一步是掌握一门编程语言。在线答题中最常用的语言
是C、C++(C plus plus),Java(近来),Pascal。要着手解决问题,你不必要学习所有
的语言(虽然许多程序员学过不止一种编程语言)。但你必须对你所学的某个编程语言的特
点有很好的基本认识(比如,C++的STL),同时你要通过多点练习这些特点避免在写程序时
产生语法方面的困惑。在你学了一门语言后,看看其他语言中一些很容易实现而在你学过的
那门语言中较难实现的特别功能(比如,在Java中可以很容易使用链表,因为它是编写好的
(内置函数),但在C中比较难因为你要手工编写)。你要去学好某门语言的标准形式。

●选择有名的在线答题系统

有许多有名的在线答题系统,可24小时判断你的题解。这里是其中的一些:
    ·Valladolid OJ
    ·Ural OJ
    ·Saratov OJ
    ·ZJU OJ
你可以用任一个来试着做题,它们都有自己的题目集,你可以选择任何一个。

●忘记效率并且从简单的题目开始

有时,你会注意到一些程序员解决了许多问题但是他们提交的次数很少(当然,他们是天才
)。一开始,一可能会想,我也要尽量地尝试最少就解决了问题。所以,在解决某个问题后
,你 就不去想着尝试用其他的算法(有些远远地优于你之前解题的方法)以更快地提高你
在排行榜的位置。但依我看来,你这样想是不正确的。你得尝试其他的方法,这样才能知道
那个算法更好。此外,你还可以了解到发生的不同错误。假如你不提交,你就不能知道其中
的错误。所以,我就建议你用各种你能想到的方法去做。一句话:假如你是初学者,不要贪
快。

找一些比较简单的题目。简单的问题意味着不需要用很特别的算法,因为我假定你是不懂一
些算法的初学者。那些问题称作ADHOC问题。你可以在S. Halim’s, acmbeginner’s,
acmsolver’s 的网站上找到这些问题列表。试着解决这些问题,这样你可以提高你的编程
能力。就我所知道的,在Valladolid OJ 的Volume 4 中有许多这样的ADHOC问题。

●遇到编译错误?

编译错误的主要源于提交的过程。早期,大部分的Online Judge没有特别的提交系统。他们
是通过邮件程序(Yahoo mails,Hotmail system etc)来从提交者获得源代码。这些邮件
系统有许多缺点,他们往往会在代码后面添加额外的代码行,导致编译器无法识别而出现
CE(Compilation Errors 编译错误)。这些系统也会把你程序中很长的代码行切成几行,
这也会造成CE和其他错误答案。所以,使用那些可用的在线解题提交系统(比如
Valladolid OJ的提交页面)。想了解更多编译方面的错误,可以翻阅我在acmsolver’s的
文章。


●学习算法

大部分的在线问题是基于各种不同的算法的。算法是用一个明确的方法来解决一个特殊的问
题。假如你现在能够熟练得编写代码并且能解决那些简单的问题,那下一步,就可以读读算
法方面的书。当然,你必须有相当好的数学技能才能理解各种各样的算法。否则,你只能跳
过这类话题的书了。假如你善于数学,那把算法一个个读一下看看能不能弄懂。在你理解某
个算法后,试着用你学过的编程语言把它写出来(这些因为,大部分代码是以伪代码的形式
描述的)假如你能够写出来而且没有错误,那就可以找有关这类算法的题目来做。有许多算
法方面的书,下面是其中的一些:
    ·Introduction to ALGORITHMS – Cormen, Leiserson, Rivest, Stein
    ·Fundamentals of COMPUTER ALGORITHM – Sahni, Horowitz, Rajasekaran
    ·Internet
试着修改书上给的算法用来解决一些问题。

●结语

不要悲观。练习可以使一个人更优秀。所以,努力的做许许多多的题。一个天才不是一天形
成的。以后,你可能就是排行榜前十的其中一个人。所以,找台电脑,安装编程软件立即开
始做题。我唯一的建议是:

“Take programming as a fun.”



References
    ·Astrachan, O., V. Khera, and D. Kotz. The Internet Programming Contest: A
Report and Philosophy
    ·Chowdhury R. A., and S. Manzoor. Orientation: National Computer
Programming Contest 2000, Bangladesh National Programming Contest, 2000.
    ·Ernst, F., J. Moelands, and S. Pieterse. Teamwork in Programming
Contests: 3 * 1 = 4, Crossroads, 3.2.
    ·Kaykobad, M. Bangladeshi Students in the ACM ICPC and World
Championships.
    ·Verhoeff, T. Guidelines for Producing a Programming-Contest Problem Set:
http://wwwpa.win.tue.nl/wstomv/publications/guidelines.html
    ·Common Mistakes in Online and Real-time Contests by Shahriar Manzoor



Acknowledgements
Anupam Bhattacharjee  is grateful to Dr. M. Kaykobad, Dr. A. Kashem, Rezaul
Alam Chowdhury, Munirul Abedin, Shariar Monzoor, Rujia Liu(刘汝佳), Adrian
Kuegel, and Jimmy Mardal, Hasan Shihab Uddin, A. K. M. Saifun Nabi, Sujoy Kumar
Chowdhury above all his family for their helps and for inspiring him. He is
also helpful to all his friends for helping him to prosper and inspiring him
for contests in 24 hours online judge(同时也感谢那些帮助他成功和鼓励他去参加在
线解题竞赛的朋友。)


--

※ 来源:·荔园晨风BBS站 http://bbs.szu.edu.cn·[FROM: 61.145.141.74]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店