爱学习,爱生活,会学习,会生活,人生有百学网更精彩!
爱学习 | 爱生活

2021年信息学竞赛如何备考

发布于:百学网 2021-08-18

2021年信息学竞赛如何备考

  — 01 —

  获取竞赛信息的权威渠道

  参加信息学竞赛,获取正确的信息很重要。很多家长习惯于从微信的朋友圈、公众号那里寻找关于信息学竞赛的信息,但是这些信息并不一定是第一手资料,信息学竞赛信息获取的权威渠道应该是全国青少年信息学奥林匹克竞赛的官网(noi.cn),因为信息学竞赛系列活动是由中国计算机学会来承办的,所以,一切与信息学竞赛相关的规则,比赛等信息都应该在中国计算机学会主办的这个官网上获取。

2021年信息学竞赛如何备考?

  其次,可以从这个网站下载PDF格式的竞赛大纲,这是2021年4月发布的,我们可以对照上面的考点进行有针对性的复习,当然,适当的多学些超纲内容总是有好处的。比如前些年的NOIP复赛的有些题目,如果用超纲的算法来解决的话,会轻松很多。

2021年信息学竞赛如何备考?

  (https://noi.ccf.org.cn/xw/2021-04-02/724387.shtml)

  NOIP竞赛分为初赛和复赛,初赛报名时间一般在每年的9月初,CSP第一轮认证约在每年的10月初,各省的初赛分数线是不一样的,有的省份分数线非常低,二三十分就可以出线,有的省份分数线高到七八十分,所以有必要在NOI官网上查找一下历年的各省分数线,做到心中有数。

  — 02 —

  初赛怎么准备

  初赛的复习不必过早准备,基础好的建议考试前半个月的时间复习,基础较弱的建议考试前一个月的时间复习即可。但如果本省的分数线很高,自己基础又真的很弱的话,可能准备的时间就要长一些了。

  千万不要轻视初赛,初赛是有一定难度的,特别是在一些分数线较高的省份,很多学生初赛考了两三年都过不去的情况也是有的,甚至有些学生复赛可以考个比较高的分数,但是卡在初赛上过不去的情况也是很常见的。因为读取别人的代码和自己写代码是两码事。

  初赛用书注意不要再用好几年前的辅导书了,要用近两年新出版的辅导书,因为考试的形式和内容和以前完全不一样了。推荐《信息学竞赛金牌导航 初赛篇》这本书,是由中山大学张子臻副教授主编的。

  初赛近五年题目分析

  初赛考察通用和实用的计算机科学知识,以笔试为主,部分省市以机试方式认证。

  阅读程序和程序完善题入门组以数学,模拟和简单算法为主,提高组要加强字符串和数据结构的训练。

  入门组

  来看一下近五年初赛选择题分析,入门组15道题,一题两分,共30分,可以明显看出,计算机知识减少了,数学,数据结构的题目增加了。

2021年信息学竞赛如何备考?

  剩下的70分是阅读程序和完善程序,主要集中在字符串处理和简单的算法。

2021年信息学竞赛如何备考?

  提高组

  再来看提高组的选择题分析,算法部分明显增加了,计算机知识明显减少了。

2021年信息学竞赛如何备考?

  提高组的程序题主要集中在算法和数据结构。

2021年信息学竞赛如何备考?

  选择题里计算机通识部分的考题数近几年明显变少,取而代之的是数学、数据结构等更偏向于编程本身的内容。这意味着竞赛越发注重编程能力的提升,而非理论知识的死记硬背。以往仅靠死记硬背和答题技巧通过初赛,但是复赛却一败涂地的做法,肯定是行不通了。

  按照这个趋势备战2021 年CSP-J/S初赛,选择题重点应该在算法、数学、数据结构上。算法部分以复杂度、排序为主,数学以排列组合为主,数据结构则以栈、链表、树、图的理论知识、特性、操作为主。

  阅读程序和程序完善题:入门组以数组、模拟和简单算法为主;提高组中字符串和数据结构是常考点。

  无论大题考察的知识点是什么,考生加强自身代码基本功很重要。读考题代码和自己写代码是两码事,考前还是应当花时间刷题,读一些陌生的代码,理解其他人的代码,尝试推导程序运行逻辑。

  — 03 —

  复赛怎样准备

  怎么准备复赛,每个人有不同的方法,我这里推荐的方法,可以做为参考:

  初期:一题多解的思维训练

  我们都知道,信息学竞赛非常有意思的一个方面就是可以用多种方法来解题,不要局限于仅仅把一道题做出来就行。可以看看这道题是不是还有其他的解法,是不是可以在算法上,在细节上再进行优化,思考的越深入,算法理解的越通透,我们平常学习的知识点呢是一个一个单独的孤立的知识点,怎样把这些点想办法连成一个网状的结构,让它们之间互相关联,是一种非常好的思维训练方法。

  近几年的竞赛中,考察选手“创新意识”的试题越来越多,即一道试题不能使用一个经典的现成算法来解决,而需要选手根据问题的需要,构造合适的数据结构,创造合适的算法解决问题。这种试题能有效的避免选手“押题猜宝”、考前“临阵磨枪”背诵算法代码,或者做几道经典题“以不变应万变”;选拔出真正具有分析、思考、编程能力的人才。

  在《编程竞赛宝典》这本书的89页就讲解了一个多种解法的例题,这儿给出题目描述,读者可以尝试思考下,如何用三重循环、二重循环、一重循环、零重循环来求解。

  【题目描述】

  把100元钱换成10元、5元、1元的零钱,求每种零钱都至少各有一张的情况下,共有多少种兑换方案?

  后期:模拟竞赛

  多参加实时的在线考试,平时的做题训练,和实时的在线考试,是截然不同的感觉,不经历模拟实战,等到了真正考试的时候,心里会紧张,心态会波动,不容易有好的比赛状态。

  模拟竞赛还有一个好处是熟悉如何选择正确的顺序答题。不要一上来拿到题就做,要分析题目的难易度,优化做题策略。要做到这一点,就必须要把题目全部看完,确定题目的难易程度,决定做题顺序。正常情况下,我们的潜意识都认为题目的难度是逐渐增加的,但是曾经有一年复赛,出题者故意把难题放在了前面。结果考生一看,哇,第一题这么难啊,信心受到了极大地打击;再看第二题,感觉更难啊,还是不会做,这时心理就慌了;没办法,看第三题吧,结果发现第三题难题目描述就是满满一页纸,看十分钟看不明白讲的什么意思,这时心态就崩溃了;那就看第四题吧,一看,还好,描述只有两句话,感觉可以做出来的样子,于是就开始做了。但实际上,第四题是最难的一道题,做一两个小时都做不出来,而第三题,如果花半个多小时到一个小时看懂了题目,写起来却是最简单的一道题。结果那一年很多考生在这上面翻车了,所以切记,一定要把题目全部看完再动手编程,不要看周围的人已经噼里㕷拉的敲键盘了,心里就慌,想的怎么他们那么强,写的那么快?你应该这么想,看都没看完题目就急不可耐的写代码的人,太冲动了,一看就是菜鸟啊。真正的高手都是象我这样谋定而后动的。

  所以说,自信,给自己一个积极的心理暗示,其实对你的现场发挥是很重要的。前几天CCF举办的NOI线上赛,我一个学生告诉我,他看错了两道题目,我说,你急什么呢?真正你会做的题,不差这一点时间的,你不会做的题,再多时间也没用,一定要把握比赛的节奏,一定要稳啊。

  — 04 —

  一些小技巧

  在复习的时候有一些小技巧,简单地介绍一下,比如离比赛的时间越来越近了,感觉自己还有很多内容不熟,心里没底,但是又没有太多时间了,怎么办呢?可以考虑多看些题解,比如说动态规划题目,最花时间的最有难度的是动态转移方程是否能够想出来,转移方程想出来了,代码实现就比较简单,基本这道题就可以写对。所以多看题解,到考试的时候,这道题你见过,既使之前没有做过,但是知道解法,思考方向是正确的,这就节省了相当多的时间。

  思维不要僵化,学会不会做的题要想办法用各种技巧得分,这种方法俗称骗分。比如暴力枚举、打表,如果担心超时,使用卡时技术啊等等。这都是比赛规则允许的,为什么不用呢?我之前见过一个学生,明明有些题的算法他从来没有学过,但他总是可以用各种奇奇怪怪的方法拿分。又比如一些题目,正解想不出来,但可以通过找规律,大胆猜测,过一些数据点的。

  重视使用对拍等方法提高做题的正确率,即使是会做的题,也一定要提防出题人设置的陷阱,导致基本都做出来题目了,但因为细节的原因一分拿不到,对拍是一种非常有效的提高正确率的技巧,稍后我会一一介绍。

  当然,做到以前几点,首先要做到的是能够熟练写出模板题,网上有很多的模板题汇总,找来一道一道地写,这时就有一个问题,这些模板需要背吗?背是需要的,但不是死记硬背,你就把它想象成数学公式,你说数学公式只是背熟了就能做对题目?显然不可能,必须要在理解的基础上背,理解了,不用背现场略微想一想,调一调,也能写出来。

  还有的同学呢,是拼命的刷题,或者拼命的看书,这种方式并不是特别的好,更好的方法的是刷题与看书交替进行,每个算法要学透,否则学了一堆算法,每个算法都学的一知半解,考试的时候根本写不出来,还不如学一个算法就把一个算法弄透。《编程竞赛宝典》里的题目呢,都是经过很多年的反复筛选的,比如书中某个知识点,我会考虑到它是不是重点,是不是很难,如果要完全掌握需要几道训练题,它还有没有什么变型?这样的安排,保证了学习的效率和进度,否则刷一堆水题,看起来通过的题量很多,但都没有什么质量,还浪费了大量的时间。

  zui.好有一个讨论研究的氛围,一个人闷着头学效率是很低的,经过讨论得出的结论,比自己闷着学得出的结论,更容易记住。我做为老师,我自己是深有体会的,比如前一天备课准备的新题目新算法,备课时是看懂了但其实并不是很透彻,但是第二天拿到课堂上讲给他们听,并且让他们讨论时,忽然又领悟不少,然后知识点记得更清晰了。

  — 05 —

  三个拿分技巧

  避免易犯错误

  竞赛中常见的错误有:忘了加读写文件语句,程序无法编译成功,忘了写return 0,文件名、文件夹等错误,个人信息错误等。

  这种易犯错误,有的选手训练一下就可以避免,但有些选手特别难纠正,我遇到的某些选手,我觉得可以这么试一下,把这些注意事项在考试的时候,以背景图的方式放在桌面上,时时提醒自己。

  考试结束前十分钟,一定要停止写代码,逐项检查是不是犯了这些错误,有的学生比赛没经验,想的还有几分钟,我赶紧再写两行代码,也许就可以把这道题做对,我告诉大家,想象是美好的,现实是残酷的,这么做的后果,基本就是题仍然没做对,而且因为匆忙,忘写读写文件了,忘建文件夹了之类的小错误导致更多的失分。

  实际上,大家可以看到《编程竞赛宝典》一书中,有些题目的文件名比较长,而且大小写混写,这么做的目的就是考察你是不是因为粗心把文件名写错了。

  制作测试数据

  题目写完后,并不是通过测试样例就可以的。

  首先,出题者往往会在测试样例上做文章,导致选手被测试数据误导。比如某些题目是需要排序后才能进行处理的,但是输入的测试数据故意给个已经排好序的数据,选手可能就以为所有的数据都是已经排好序的。

  其次,为了更好地区分不同层次的选手,命题人会考虑各种不同情况,精心的生成每一组数据,而不是随机生成或全是极限数据,否则测试数据组数的增加就没有了意义。除了增加测试数据的组数,多个小问部分分、优劣程度部分分、超时程度部分分都是增强区分度的有效方式。

  所以为了验证我们的程序正确性,需要自制一些测试数据。

  在《编程竞赛宝典》一书的3.2节,介绍了怎样制作测试数据。以一个简单的高精度加法来说,首先要考虑一些特殊数据是不是可以通过。再考虑极限数据行不行,最后,才考虑随机数据。

  之前有学生自创了一些题目,有一道题他生成了五十组测试数据,但这些数据全是随机生成的,这些随机生成的数据,其实做一百组,两百组,基本都是同一类型的,没什么区分意义,所以我随手做了几个非常简单的数据,一下就卡了他的代码。

  对拍

  对拍是用朴素但费时的例如枚举、搜索等方法写一个测试代码,和准备要正式上交的代码输入同样的随机数据,以检测输出结果是不是一样的技术,这种方法可以有效地避免因粗心大意而导致的失分。

  — 06 —

  心态调整和考试技巧

  “考试成绩发挥好不好,就看其心理素质好不好。”这种说法虽有失偏颇,但也不无道理。考试中的心态居首要位置,学习策略、技巧和知识基础紧随其后。

  有的考生自我感觉不紧张,但其实他的内心是紧张的,只不过这种紧张被他的潜意识隐藏起来了,只有直面紧张,承认自己的紧张,心态才会慢慢平和。另一种是考前盲目自信,对考试的困难和复杂性估计不足,相信能轻易取得成绩,人求胜欲最强的时候,恰是最不冷静的时候。

  韩国棋手李昌镐被人们称为“石佛”。为什么呢,因为他下棋时,无论输赢,都是面无表情,曾经有记者拍下他下棋的整个过程,发现自始自终,照片上的他几乎没有一点变化,我很推崇这种状态。我也经常告诉我的学生,拿奖了,你不必太开心,因为你付出了这么多,拿奖是必然的,不是天上掉陷阱,这是你应得的,有什么值得这么兴奋呢?没拿奖,你也不要太沮丧,因为你下的功夫不够,细节做不到位,找到自己的薄弱点,改正下,下次再来。就算学了很多年,什么奖也没拿到,但起码你从编程中悟到了很多东西吧,这些东西也是你终身的财富。

  学会心理暗示。当你做不出某个题的时候,一定不要乱,心理默默的暗示自己,既然自己不会,别人也一定不会。做出了某个题,也不要盲目的高兴,因为这个题自己会做,别人做起来也会很容易的,所以不能骄傲。

  设计算法,要尽量躲避第一印象思路,因为这个思路往往是错的,设计算法不仅要证明这个算法的正确性,还要从时间、空间等因素来考虑,千万不要很草率的结束这个过程,否则写到一半再来改正,浪费了时间不说,还影响了心情。

  做题要稳和准,能拿到的分一定要拿到,有些题目先不要考虑用什么华里胡哨的算法直接拿满分,先考虑用朴素的算法把能拿到的分拿到。

  韩国围棋选手李昌镐有句名言:“棋局如人生,下棋时,布局越华丽,就越容易遭到对手的攻击,生活中,少犯错误的人,要比华而不实的人更容易成功。”竞赛也是如此,每次比赛完分析题目,都会发现如果当时沉着冷静地应付考题,只用朴素的算法把能拿到的分都拿到,确保不犯一点错误,基本上就可以拿到一等奖。

  利用5 分钟的时间写出程序的框架,第一步该干什么,第二步又该干什么,一步一步的写出来,并且写出关键的伪代码,这样在编程时就会条理性清晰,降低出错的几率。另外适当的注释语句,也有利于理清思绪。

  学会适当的休息,不要长时间陷入一件事情不能自拔。当你编程序长时间地陷入了一个死角没有突破的时候,你可以考虑举手告诉老师你需要去一趟卫生间,去外面溜达一圈,看看风景,这样就可以换一个心情,换一个思维。在你休息完回来时,也许你就会突然发现有了思路。

  张新华

  毕业于浙江大学和厦门大学。中学高级教师,信息学金牌教练。长期从事中小学信息学竞赛辅导工作,无论是在信息学还是在教学上都有着数十年的深厚积淀,获得过2009年普通高中信息技术现场优质课比赛全国一等奖获得者。培养的学生更多次获得全国青少年信息学奥林匹克联赛国家一等奖及亚洲与太平洋地区信息学奥林匹克竞赛奖牌。

  开发了三维图形化C++ 编程工具Dev-C++ 智能开发平台和Python 可视化界面设计软件Visual Python。

本站(www.100xue.net)部分图文转自网络,刊登本文仅为传播信息之用,绝不代表赞同其观点或担保其真实性。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本网联系(底部邮箱),我们将及时更正、删除,谢谢

- END -
  • 相关文章