博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

备战信息学奥林匹克分区联赛

Posted on 2010-10-22 21:41  桃子在路上  阅读(297)  评论(0编辑  收藏  举报

NOI即信息学奥林匹克,它的分区联赛相当于数学的全国高中联赛、物理的全国复赛和化学的全国初赛,分区联赛分为初赛和复赛两个阶段。
初赛为笔试(2个小时完成),一般考察计算机基本知识、基本数学能力和基本程序设计知识与能力,题型一般是:选择题(基础知识)、数学题(一般是推公式)、写程序运行结果题、编程知识(考察范围不定,考过数据结构、算法复杂度等)和程序填空。题目的难度和考查范围从总体来说是逐年增加。初赛主要是靠平时的积累。其中选择题部分各年差别比较大,考查的范围很不相同。初赛的题目水平并不是很高,不少题目不大规范,但只要基础好(选择题和填空题)、有耐心(完善程序)和细心(写运行结果),一般都能得高分。
复赛是上机编程,一般是3个小时完成3~4个编程题目,从2001年开始改为由全国统一评奖。一般是键盘输入,屏幕输出,内容涉及到搜索、动态规划、简单的图论算法以及一些数学技巧等。
比赛过程: ①前一天试机,②选手进场,③发试题,④开始做题,⑤竞赛结束(将程序保存在软盘或机器上),⑥评测(即机器“改卷”),⑦发奖
比赛特点 ①好玩:因为竞赛题目很有趣,学生在学习过程中充满激情,学会一些编程技巧后,除对信息学有帮助外,还可写写游戏、开发其它应用软件等,真正寓教于乐。②残酷:信息学竞赛与其他竞赛不同,不是通过阅卷而是评测来决定选手的分数,从不会给“过程分”,因此往往会出现“一失足成千古恨”的情形,一点小错误导致得0分的悲剧时有发生。③方便:不会遇到在数学,物理竞赛中遇到的 “运算量大”的问题,需充分发挥主观能动性,评测很方便,不会因阅卷老师“看错了”、“没明白你的思路”而丢分,一般考后很快当场被“批改”出来。④灵活:由于评测方法是黑箱测试法(只看结果不看源程序),无论用什么方法,只要输出了正确的结果就可得分,而且即使方法很不严密甚至错误,如果在很多情况下能得出正确的结果,也能得不少分的,所有题目都没有固定解法,层次越高的竞赛越如此,这需要同时也鼓励有创新精神的选手。
鉴于此,在平时的训练中应从以下几个方面着手:

教师辅导策略

目前,辅导教师往往是参赛选手的信息技术课任教师,针对信息技术课时较少之情况,辅导教师应在平时的教学中有针对性地抓好基础。
1
、对学生的培训内容与难度控制
    培训的内容要根据学生的知识水平和智力水平不同进行合理安排。首先安排语言的学习,第二步安排基本数据结构知识的学习(如栈、队、链表),第三步安排简单的算法的学习(如回溯、递归、枚举),第五步安排基础算法的学习(深度、广度、双向、 A* ,第六步安排综合解题训练。
    培训的难度应根据学生的认识规律,先易后难,易中有稍难,有条理、循序渐进地进行。如在学习 Pascal 语言时,每次学习时布置的作业应针对所内容布置较容易的题目,学生开始对语言的学习有所入门后,再增加一道稍难、稍需思考的题目,激发学生思考问题的兴趣。当然这些都要求教师要精心出题,有的放矢(注意联系实际,问题有实际背景)。
2
对学生进行必要的考试策略指导
①先易后难(但判断题目的难易也并非易事,学生要有丰富的编程经验和扎实的基本功);②得分策略(以得分为主) 。在平常的训练中,应有模拟考试对以上两个方面进行训练,并作讲评,使学生充分认识到考试中应有一定的技巧。
3
、教师应综合当前的形势,分析竞赛动态、把握竞赛脉搏
    在各级竞赛中,考察学生的知识点在不断变化中,而 NOI 竞赛以 IOI 竞赛的动向为依据,分区联赛又以NOI的动向为依据。分析国内外竞赛新动向,对学生进行相应的训练是学生在竞赛中取胜的法宝。具备这种分析能力,是奥赛指导的必需能力,需要在教师带队参加各级竞赛时,去感悟。往往这些信息都会从各种场合活动中渗透出来,但教师本身要有这种敏感,否则这种信息是感受不到的。
4
、教师要对奥赛中常见算法十分的熟悉
    万变不离其中,奥赛中常用算法不外乎搜索、动态规划、网络流、分治、贪心等,有了这些基础算法的掌握,学生就打下一个扎实的基础,加上学生的聪明才智和坚实的文化课功底,学生就能在各级竞赛中取得好成绩。因此教师在基础训练时,应注意基础知识与算法的训练。而要把握学生进步的方向,教师更要对基础知识与算法有熟练的掌握。这样在训练中能更有把握地控制学生学习过程,让他们在自己的计划下有条不紊地得到训练和成长。同时,自己还应具有一定的解决问题的能力。算法相对来讲还是比较好学,但对于千变万化的赛题,要训练学生具有一定解决问题的能力,即能从题目中抽象出数学模型,设计出合理、有效的算法。这更要求教师自己要有一定的分析、解决问题的能力。这样,在训练时,老师才能设计出有针对性的题目,或能从资料中选择适合的题目进行训练。
5
、充分利用各种科技手段获取与竞赛相关的信息
    可通过 Internet 查找有关竞赛的资料,如 ACM 赛题,了解国际竞赛动向,也可以通过参考人家的题目,开拓思路,更好地为自己的奥赛指导工作服务。
6
进一步扎实数学功底是指导竞赛的不竭的动力
    目前的信息学奥林匹克竞赛,是比试智力与利用计算机解题能力的竞赛。在各级竞赛中不仅考察学生的基本数据结构知识的掌握情况、基本算法掌握的情况,还强调要掌握必备的数学知识,具有一定的数学功底。在许多竞赛题目的解题中,若能从中提取出数学模型,应用数学知识求解,编写出来的程序效率将得到大大的提高。因此在培训中加强学生必备数学知识的学习是非常重要的。
竞赛中常用的数学知识有:高中数学、组合数学、线性代数、图论(包括网络流)、动态规划等。因此教师还要有扎实的相关的数学功底,才能在教会学生在竞赛中应用数学知识解题。教师要不断复习或学习有关大学或研究生的数学知识,进而在训练中能将一些有用的数学知识,分割地传授给学生。由于时间的限制,在培训时要经常是以题目的形式出现,让学生先解题,这时学生可能用其它非方法可以求解,但一般速度都比较慢,接着向学生介绍自己的算法,将怎样从原题中提取出数学模型,进而学习相关的数学知识,这样以还达到学习相关数学知识与怎样建立数学模型的目的。当然对于有能力的学生,在品尝到应用数学知识高效解题的乐趣之后,可以引导他们自学有关数学知识,然后在解题训练中出现可以用数学方法解题的题目,有目的地训练学生抽取数学模型,建立算法的能力。

学生备战策略

一、初赛备战策略
    初赛考的知识点,大纲如是说:计算机基本常识/基本操作和程序设计基本知识。选择题考查的是知识,而填空/问题解决题更加重视能力的考查。一般说来,选择题是不需要单独准备的—也无从准备。只要平时多用心积累就可以了。问题解决题目比较固定,可以做做以前的题目。写运行结果需要多做题目,培养良好的程序阅读和分析能力,而完善程序最好总结一下以前题目常常要填出来的语句类型。这个每年都差不多的,想不出来是可以回忆一下有哪些可能填的语句,再放到程序里面看是否合适。
⑴选择题:共30分,一般是比较容易得分的,考查范围越来越紧跟潮流。需要有比较广泛的知识,包括计算机硬件、软件、网络、数据结构(例如栈,队列,排序算法)、程序设计语言以及一些基本的数学知识和技巧(例如排列组合)。
⑵填空/问题解决:这部分题目对数学要求要高一点,往往考查的是代数变形、数列(一般是考递推),也考查一些算法和数据结构知识。建议多花一点时间做,尽量做对。
⑶读程序写出运行结果:一般是两道题目,每题大约15分,这部分几乎是送分题,而且占的分数奇多,但得分率却不见得高,主要是检查学生们细心和认真的程度。一般做这类题目的核心是找程序目的,即这个程序想干什么。迄今为止考过的题目还没有“乱写”的,总有一点“写作目的”的。抓住了它,不仅得出答案变得很容易了,而且对自己的结果也会比较有信心。写程序运行结果大纲规定是必考的。试卷中给出的程序并不复杂,语句的含义容易明白,因此悟性好的选手总是很快就能体会到程序的设计思路并得出正确的答案,而机械模仿计算机硬算出结果的同学往往做的读程序写出运行结果。
准备这部分内容时,要根据程序中出现的变量,列出变量的变化草稿。实际相当用大脑做运算器,用笔和纸作存储器,用尺子作指针,表示程序当前运行到那一行。随着程序的运行,只要随时修改变量表中相应变量的当前值。 在程序的运行过程中,都要反复地修改数据,所以一定注意,尺子要一行一行地移动,表示程序当前运行的位置。此时要注意哪些变量的值发生改变,及时修改变量表。一般对某些数据要反复多次地修改,千万不要图省事。循环变量每次取值的情况,都要记录(修改变量表)。每次运行时都要看表中当前变量的值,再根据它的值计算相应表达式的值。
⑷完善程序: 这部分题目得分率似乎不高。没关系,尽量做吧。把一些简单的填好就行了。建议把以前的初赛题目都做做。常常让选手填的是:①初始化(i:=0; j:=0; for i:=1 to n do a[i]:=0之类的);②一些明显的动作:a.结果没有储存在需要的地方,b.累加器没有做加法,c.输出;③关键动作,在算法描述中出现的比较关键的步骤,例如交换排序程序的“交换”操作等很明显需要完成的操作。分析方法和写运行结果类似,注意分析变量和程序结构,理解变量和模块的作用是解题的关键。

二、复赛备战策略
复赛题目的特点是:
第一题:算法比较明显的,或者和数学关系比较大的题目。
第二题:好上手,但程序量要大一点的题目,考虑全面也不容易。
第三和四题:一般是搜索,或者算法不明显的题目。 算法方面,可能考到的是:搜索(回溯就可以了)、动态规划(几乎是必考)、贪心、递推(小心真的考到),递归……,数据结构反而考得不多,熟悉字符串的操作和排序算法就差不多了。
1
、知识体系回顾,多做经典题目。在算法方面可能考到的是:搜索(回溯就可以了)、动态规划(几乎必考)、贪心、递推(小心真的考到)、递归、 简单的图论算法(dijkstra, MST, euler路等)、数据结构反而考得不多,熟悉字符串的操作和排序算法就差不多了。记住:信息学不是看会的,是练会的。一定要多看多想多练。
2
、养成编码和调试习惯。复赛考查的算法并不困难,选手在实现上的问题往往还要大一些。因此建议:
①充分利用草稿纸,不要对自己的“心算能力”太自信了。编程熟练的同学喜欢“一气呵成”,拿到题目就开始编码,我认为这样不好。做信息学竞赛题的思维过程是丰富而曲折多变的,考虑问题必须全面。仅凭一时的“感觉”来编程往往是漏洞百出。初学者常常忘记做一些初始化工作(远不止变量赋初值这种最简单的),即使有经验的同学也难免因一时疏忽写出几个错误的语句。最要命的是“第一感觉”的算法是错误的或者效率太低,而程序编了大半才发现……。做一些复杂的题目,大多数人多会在一分心的时候突然断了思路,不知道下一步该写什么了。
②编码采取自顶向下,逐步求精的方法,调试时采用输出中间结果的办法及时找出错误的地方。可以这么说,思路越清晰,对自己程序的算法和编码越了解,调试也会越顺利(一定不要忽视)。
③多做套题,做单个题目和套题感觉并不一样。做套题要涉及到时间分配和做题顺序等,这些东西同样十分重要。
3
、最大限度发挥水平。
①认真审题。审题对于信息学竞赛来说尤其重要。同一个题目如果数据限制差异大的话可能难度差异也很不同。例如:输入AB,输出A+B的值。如果题目说0<=AB<=10000,这道题目无疑是一道很简单的题目,但如果题目说0<=AB<=10^100则显然就要用到高精度数的处理了。从某种意义上说,数据限制也暗示了可能的算法,数据小,也许是搜索派上用场的时候,数据大了,可能只能考虑动态规划、数学方法等高效的算法了。
②正确估计题目的难度和自己的水平。初学者是一般不可能做出所有题目的,应该选一些平时最熟悉和有把握的题,一定要做对。熟悉的题目要加强编程熟练度、准确度、测试和调试能力,把自己有能力拿到的分拿稳。初学者常常“意气用事”,拿到一道看起来很“爽”的题目就开始做了,其实这样不好。平时必须训练一下对题目的规模、难点、编程调试复杂度等方面的估计,还要注意自己擅长哪方面,编程速度和准确度以及调试能力如何,结合自己对题目的估计,方能正确的选择题目和安排时间。
③重视测试。能够做的题目常常得不了满分,这也属于发挥欠佳。究其原因不是自我估计不准,而是考虑问题不全面,一道自己有把握,有信心做好的题目一定要花大力气保证其正确性。测试的数据既要考虑一般,也要考虑特殊情况,评分的唯一标准是测试数据。一道困难的题目如果无法下手,在时间允许的情况下一定要写一个能解一些特殊情况的程序。很多最优化题目,不要一个字都 不写,根据“直觉”算法(如贪心),虽然得不了满分,也能得一定的分数。反正又不是写解题报告,得多少算多少。
④编程过程中注意随时存盘。最好保留一些不同版本(如算法不同)的程序,便于选择修改。
总之,在分区联赛中一定要“打好”基础(对于基础部分题目,一定要拿满分),提高正确率。在平时的训练过程中,必须夯实数学基础,熟记基本程序和基本算法,熟悉各种算法和数据结构,多看多想多练。
分区联赛并不可怕,努力吧,祝成功!!



【附】部分相关信息学竞赛网址:

1NOI奥林匹克竞赛:http://www.student.gov.cn/jsyd/
2
、中国教育曙光网:http://www.chinaschool.org/
3
、信息学奥林匹克基地:http://www.gdoi.net/
4
、信息学竞赛天地:http://www23.brinkster.com/newioi/
5
、信息学初学者之家:http://www.oibh.ioiforum.org/
6
、信息学资源:http://202.109.195.141/chenyan/noi/noi.htm
7
、编程之道:http://202.109.195.141/chenyan
8
、大榕树编程世界:http://www.pas.csol.net/
9
、汕头信息学竞赛:http://www.noi.stinfo.net/
10
、广州六中信息学基地:http://www.gz6hs.net/lzoi/