信息学奥赛导论


有一个小的故事:野人献曝。

从前,有一个农民,冬天干了活后,休息晒太阳。好舒服呀。他想,这么舒服的享受,我要献给国王,让他也能得到享受。于是他兴冲冲地到了王宫,将他的宝贵经验献给了国王。

我现在就象这个农民,把自己认为很宝贵的经验献给大家。

信息学是一门很有趣的学科,表面上研究的是一些算法和数据结构,实质上是利用这些知识解决实际问题,比如:牛棚如何修补最节省材料(USACO)、星际争霸中农民怎么采矿最优化(Ural)。学这门学科还有一个即得利益:取得保送或自主招生资格。让我们一起来开始这个旅途吧。

我讲要讲述的内容:

1、  奥赛详细情况及其比赛结构。

2、  联赛初赛要掌握的内容。

3、  联赛复赛只要掌握的内容。

4、  全国竞赛忠告。

5、  寄语。

6、  术语表。

7、  推荐试题库、网址。


注意:联赛大纲已经规定2005年及之后初赛:PASCAL或C/C++: 复赛:PASCAL或C/C++。建议新手使用Pascal。


一、奥赛详细情况及其比赛结构。

  国际信息学奥林匹克竞赛(IOI)

中国国家信息学奥赛(NOI)

美国国家信息学奥赛(USOCO)

其他国家信息学奥赛(比如:俄罗斯、日本…)

信息学奥赛复赛(NOIP)

信息学奥赛初赛提高组(NOIP)

信息学奥赛初赛普及组(NOIP)

很清楚,比赛是呈阶梯状,我们的步骤是初赛、复赛、NOI、IOI。只有通过(AC)了NOI才有可能在IOI中为国争光。

邓爷爷很早就重视这方面的教育,中国的信息学奥赛在世界上一直是名列前茅,在I0I’94(瑞典),黄天明同学编的程序比组委会的标准答案运行速度快了20倍。也正式由于重视,教育部也推出了一系列的奖励:在NOIP复赛中获得一等奖的学生具有保送资格,一些重点大学对这类学生是来者不拒的。在NOI竞赛中获得一、二、三等奖的学生同样具有保送资格,这个资格不得了,如果再加上学校的美言,去清华北大是没有问题的。得IOI奖的同学那就……我不知道具体怎么样,反正“后果”很严重就对了。

我们当前正处于信息学奥赛初赛提高组的时期,现已确定NOIP2005初赛于2005年10月15日举行,复赛于11月19日举行。形式很清楚:9月份开学,而10月15日就要比赛了,对于高一的学弟学妹们来说时间很短,然而在短短的一个月里通过初赛也不是没有可能,下面我来为你们分析一下形式和试题。

二、联赛初赛要掌握的内容。

初赛的题目分为选择题、问题求解题、程序阅读题、程序完善题。

Ⅰ、选择题:

肯定有:数进制的转换、集合、计算机发展历史或作出贡献的人物、数据结构。出现几率很大的是:数据的储存结构、数据结构(例如栈,队列,排序算法)、排列组合、计算机的外围内含设备等。

Ⅱ、问题求解题:

一般考数学内容的居多,尤其是排列组合、集合的交补。数据结构:树和图等。

Ⅲ、程序阅读题:

第一、二题一般很简单,千万不要放弃去做后面的难题,能笔算的笔算,而不是推什么公式。后面的两题大多是在让你推一个或者两个相关的公式,一般的有等差数列,等比数列,差后等差等。

Ⅴ、程序完善题:

这道大题很有趣,也很难,历年得分率就不高。你难,大家也难,尽量做吧,能拣分的就不能错过!首先要做的当然是理解题意,将题目意思看得透透的。一般常出现的答案是(SRbGa提供):

1)初始化(i:=0; j:=0; for i:=1 to n do a[i]:=0之类的)

2)一些明显的动作:

a.结果没有储存在需要的地方。

b.累加器没有做加法

c.输出

3)关键动作。在算法描述中出现的比较关键的步骤。例如交换排序程序的“交换”操作等很明显需要完成的操作。

分析方法和写运行结果类似,注意分析变量和程序结构,理解变量和模块的作用是解题的关键。

对于高一的学生来说,选择题和问题求解题具有很大的发挥空间,如果嫌一个月的时间不够,大可放心地去找一些我上面所提及的相关的资料背背,然后再联系一下往年的试题巩固巩固。至于程序阅读题,应该先搞定前两题,也就是说,把在一个月的学习里,把基本语句、循环、函数的基础都搞清楚,不求上机操练,能读懂程序就行。等过了初赛,还有一个月那就得突飞猛进了。让高一的参加奥赛,只不过想让他们体会一下气氛。建议高一的同学过了初赛再看下面的内容。


三、联赛复赛要掌握的内容。

广西的联赛分两个地方,初赛在本地,复赛在柳州。

1.语言方面:

  大家大多是Pascaler吧,该语言去年(2004)就闹出了风波,科协居然突然要求用FP(Free Pascal),还好后来允许TP(Turbo Pascal)。其实我在家里一直是用FP,说句良心话,对于刚学Pascal的人来说TP稳定多了,而FP适合那些喜欢Free的人。不过还是要时不时地试试FP。其实用FP的人绝对占用TP的人便宜。

1.算法和数据结构
算法方面,可能考到的是:搜索(回溯就可以了),动态规划(几乎是必考),贪心,递推,递归,排序。数据结构反而考得不多,有时间的话看看树和图,高一的同学应该将”树”弄得透透的,而高二高三的同学应该注意树和图的遍历也常考。接着熟悉字符串的操作和排序算法就差不多了。在未能确定自己能得复赛一等奖之前,千万不要去弄什么网络流、Heuristic Search (启发式搜索)之类的烦琐算法,这些在大纲里都没有规定。记住:信息学不是看会的,是练会的。一定要多看多想多练。

2.做题

开始的那段调试时间比较重要,熟悉环境,最好把几个常用的算法熟记下来,调试时间搞清楚环境的事情以后马上动手把这些有用的例程默出来,可以节省不少时间。一旦比赛开始,就不要去管其他的了,没写完那些也不管了,细心的慢慢的读题,不要急,看清楚题目,了解题目考的是什么,和以前练过的哪种模型是一样的,又有什么区别。弄清楚数学模型以后,动手写程序,不要玩游戏,要充分利用时间。

3.检查

自以为是的人是昏蛋。有这样一个人,他花了一个半小时写完了前三题,后面的一个半小时放在了第四题上,当发现第四题没有希望时,居然玩起了游戏。结果可想而知,他事后后悔地说道,如果检查一下前面的题目,将第三题的冒泡排序换成堆排序那后面的整个人生就将改写呀。这给我们一个提示:将该拿的分拿到!也就是说,那些有思路、有整体构架的题目应该确保它们能够通过所有测试数据。确保这些题目后才要去攻难题,千万不要嫌时间多,千万不要嫌题目简单,测试数据才是王道!

4.评分的唯一标准是测试数据

如上面的说的测试数据重要。我不是鼓励大家“投机取巧”,我的意思是,一道困难的题目如果无法下手,在时间允许的情况下一定要写一个能解一些特殊情况的程序。例如某年分区联赛《旅行家的预算》一题,无解的数据和没有加油站的数据各一个,难道对于这两个情况的程序你还不会编吗?得一些分算一些嘛。还有“导弹追踪”一题有一个数据是升序排列的,难道你不知道这种情况是一次只能打一个吗?很多最优化题目,不要一个字都不写,根据你的“直觉”算法(例如贪心),虽然得不了满分,也能得一定的分数。反正又不是写解题报告,得多少算多少。 

四、全国竞赛忠告。

如果你过了复赛那关,如果你以优异的成绩选入了省队,那么恭喜你,你抛开其他所有的学科吧,全心投入这项事业来!

全国竞赛汇聚了各地的高手(牛人),他们毫不客气,他们有能力。这个时候再多的知识也不能嫌多,网络流一类的优秀算法更应该必背。

这个时候,做题和总结是一个非常好的办法,网上的题库多得厉害,应该选几个题库研究一下,将他们弄透,题库的建议看第七点。网络的力量是无穷的,应该多找一些高手交流交流。

在集训的时候不要放过省里老师,他们的经验就是要等你去问才能得到。


五、寄语。

做人要厚道,既然都是中学生,那么大家之间要互相帮助,让尽可能多的同学获得保送的机会,为自己而战,为学校而战!

不正直的人:

对于其他的人类我不去罗嗦,他们心里面也应该有方向了的。我只想对编程一无所知,但是有兴趣的同学说说:先过编程的语言关吧,编程的思想要上手 是有一点困难的,但是作为一个优秀的信心十足的并且有野心的人,这点困难不算什么。而对于那些只是有些兴趣,平时喜欢打游戏,不务正业,只是来玩玩的人,我也很鼓励你们参加比赛。

我很想强调语言,只有当你把一门语言用得想母语一样熟练,甚至可以用编程语言写作文的时候,你才具有描述一种算法和处理数据的能力,才能随心所欲的实现自己的思想。学语言不难,就是多编几个程序罢了,怕就怕连这个都懒得动手。

程序是有趣、精确而简洁的,写程序是一件创造性的工作,所以,尽量去享受。


六、术语表。

AC: accept,在很多题库中,当你提交的程序通过所有的数据后,它就会给你一个大大的AC。

Pascaler:学Pascal的人。

USACO:美国的信息奥赛,USACO题库是很有名的。

Ural:俄罗斯的题库

七、推荐试题库、网址。

TOJ : http://acm.tongji.edu.cn/index.php]  适合初学者

USACO:http://ace.delos.com/usacogate2 适合范围广泛,建议要做

USACO 翻译站点:http://wzioi.wzms.com/usaco/default.asp

ZJU: http://acm.zju.edu.cn/ 高手聚集的地方

Ural: http://acm.timus.ru/ 想去就去吧

大榕树: http://www.mydrs.org/ 龙蛇混杂的地方,建议和他们讨论讨论

信息学初学者之家:http://oibh.ioiforum.org   

信息学初学者之家[新]:http://www.oibh.org   

你可能感兴趣的:(计算机相关,pascal,数据结构,算法,语言,fp,编程)