学习编程

1.题库与网站资源
    题库-在线提交系统(Online Judge)简介
    下面是几个比较大的在线提交系统(Online Judge)里面有大量历年的竞赛题目,注册一个ID,然后用自己熟悉的语言(一般有Pascal/C/C++/Java)写好源代码提交即可,会实时返回信息告诉你是否正确。采用黑箱测试,系统里有一套标准的输入输出数据(对外保密,而且通常数据很多很怪),你的程序的输出和标准输出完全符合即可。
    常见的返回信息有 AC(Accepted,通过)、WA(Wrong Answer,输出有错误)、TLE(Time Limit Exceeded,超时)、MLE(Memory Limit Exceeded,内存溢出)、RE(Runtime Error,发生实时错误)等,只有AC了才算做对一题。这里只是一个简要介绍,请大家在做题时先看看各网站上的FAQ,Enjoy it
    北京大学 Online Judge(POJ)  <http://acm.pku.edu.cn/JudgeOnline/> 建立较晚,但题目加得很快,现在题数和ZOJ不相上下,特点是举行在线比赛比较多,数据比ZOJ上的要弱,有时候同样的题同样的程序,在ZOJ上WA,在 POJ上就能AC。不过感觉pku的题目要难很多。这个题库的一大特点就是 Online Judge功能强大,其实pku现在已经是中国最好的ACM网站。
    浙江大学 Online Judge(ZOJ) <http://acm.zju.edu.cn>  国内最早也是最有名气的OJ,有很多高手在上面做题。打开速度快。
    西班牙Valladolid大学 Online Judge(UVA)    <http://acm.uva.es/>世界上最大最有名的OJ,题目巨多而且巨杂,数据也很***钻,全世界的顶尖高手都在上面。据说如果你能在UVA上AC一千道题以上,就尽管向IBM、微软什么的发简历吧,绝对不会让你失望的。
    俄罗斯Ural立大学 Online Judge(URAL)    <http://acm.timus.ru/>也是一个老牌的OJ,题目不多,但题题经典,我在高中的时候就在这上面做题的。
    俄罗斯萨拉托夫国立大学(Saratov State University)(SGU)    <http://acm.sgu.ru/>SGU 是俄罗斯萨拉托夫国立大学(Saratov State University)用于培养ACM选手的训练网站。这个网站的建成时期较晚,但随着比赛的举行以及新题目的加入,这个题库的题目也日渐丰富。这个题库的一大特点就是 Online Judge功能强大,它不仅使你避开了多数据处理的繁琐操作,还能告诉你程序错在了第几个数据。这一点虽然与ACM的Judge有些出入,但是却方便了调试程序。与UVA相比,这里的题目在时间空间上要求都比较严格,而且更多的考察选手对算法的掌握情况,所以特别推荐冲击NOI的选手也来做一做。
UsacoGate Online Judge(USACO)    <http://ace.delos.com/usacogate>
全美计算机奥林匹克竞赛(USACO)的训练网站,特点是做完一关才能继续往下做,与前面的OJ不同的是测试数据可以看到,并且做对后可以看标准解答,所以如果大家刚开始的时候在上面那些OJ上总WA却找不到原因的话,可以试着来这里做做,看看测试数据一般是从什么地方阴你的。


网站资源:
http://www.608088.com   acm很不错的网站(资料很多),教育网也可以很快打开,acm社区.

比如:
acm算法介绍 算法模版  http://www.608088.com/category-5-1.html
各大OJ解题报告        http://www.608088.com/category-4-1.html

注意:还有一种非常重要的网站资源―――用百度搜索你在oj上不懂的题目(例如:pku 1015),就可以看到了。也可以直接打“ACM”等等。有点看运气,但是其实也有搜索技巧在里面。



2 学习资料说明
      入门其实有两种方法:1 自己看竞赛书,看别人的程序等等。2 上题库(如:pku和zju)做题。第一种可以较为系统的学到东西,但是时间久了就会无聊,而且长久实践不足,编程能力永远得不到真正的提高。第二种虽然看着自己AC很兴奋,看着自己的帐号排名提高很开心,但是学习不系统,对较深的知识学习不足,总停留在做简单题的份上。
      最好的方法就是两种方法相结合。作为入门者还是要以多看简单竞赛书多看题目和程序为主(例如:《信息奥赛辅导教材》、《基本算法稿》、《06暑假培训》和《基本算法C++》,都在“初级入门学习”文件夹中),这个学习时间占70%,同时也要有30%的时间上题库做题。毕竟理论学习要和实践相结合。



3 一些话
    真的很不确定这些资料可以起到多大的作用,但是唯一确定的就是自己当年如果有这些东西,那将是多么~~~事实上这些资料确实对过去新加入的ACMer有很大的帮助。愿它对每个看到这份资料的人都能充分起到作用!
ACM是什么,ACM学习过程中会有什么感触。得到不同结果的人会说不同的话。但是唯一一样的就是:无悔!
    关于ACM的介绍还有入门的东西可以在“初级入门学习”文件夹中的“ACM入门进阶.rar”找到部分的答案,在百度和google搜索也可以。这里就不在多说。大学中可以学的东西很多很广,计算机专业包括的东西也一样。具体怎么样,大家只要走进西门两家书店便一目了然。如果说程序语言是计算机专业的基础,那么ACM充当这个基础的角色一点都不过份。ACM中可以学到的是对程序设计语言的深入理解和应用,同时培养出来的是建模和转化模型的能力,也是解决问题的能力。这些是优秀计算机人应有的基本。

    有人说:“如果再来一次大学,我会在大一大二疯狂搞ACM,参加省赛,参加区赛,参加世界赛,然后大三开始做项目~~”问题是你参加了世界赛就算不拿奖你也有资格可以去微软和google了。ACM是大学生四大竞赛之首,没有水分,完全考平时做题思考积累的实力拼搏。这几年国内ACM的发展太快,难度增大,牛人更牛更多,竞争更加悲惨。华师在两年前参加ACM的人不到10个,现在不下200人。华师的发展只是全国其他高校延后了几年时间的一个缩影。但是这是社会进步带来的我们不得不面对的结果。例如前面几届的师范专业老师就会有到了学校要面对比他厉害十倍的学生的尴尬场面。非师专业也有面试网易腾讯等公司时因为写不出算法而与高新offer无缘的情况。这里更想说的是ACM的好处,而不是让大家在压力下不得不学它,要知道许许多多的计算机领域几乎与 ACM无关(例如网页制作,flash等)以上这些话是回答那些说ACM没用的人的,不包括对其充满热情的人。
    其实ACM的公平不但体现在竞赛现场上(通过测试数据就算赢,不管你程序怎么写),而且还体现在学习的过程上。这点需要详细说明一下。
1:学习的方法几乎一样入了门之后大家都是在题库上拼命做题。全世界没有一个人例外。
2:自学是唯一的方法。ACM不是看懂的,也不是听懂的,而是练懂的。懂的唯一方法就是要多练多写。在赛场上无数悔恨的根源就是平时训练做题时对没有完全理解的知识抱有幻想。台上一分钟台下十年功!
3:大家平时的生活都是:

<http://acm.pku.edu.cn/JudgeOnline/> 、 <http://acm.zju.edu.cn/><http://acm.zju.edu.cn> 、<http://acm.uva.es/>。

posted @ 2010-12-17 15:06  flyxiang  阅读(196)  评论(0编辑  收藏  举报