【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《信息学奥赛分区联赛复赛经验漫谈》,欢迎阅读!
信息学奥赛分区联赛复赛经验漫谈
一、认真审题审题
对于信息学竞赛来说尤其重要。同一个题目如果数据限制差异大的话,可能难度差异也很不同。例如:输入A,B,输出A+B的值。如果题目说0<=A,B<=10000,这道题目无疑是一道很简单的题目,但如果题目说0<=A,B<=10000000000000000000000000000000000000000000000显然就要用到高精度数的处理了。 从某种意义上说,数据限制也暗示了你可能的算法。数据小,也许是搜索派上用场的时候,数据大了,可能只能考虑动态规划,数学方法等高效的算法了。 二、编码和调试的能力
复赛考查的算法并不困难,选手在实现上的问题往往还要大一些。建议大家:一,充分利用草稿纸,不要对自己的“心算能力”太自信了。编程熟练的同学喜欢“一气呵成”,拿到题目就开始编码。我认为这样不好。做信息学竞赛竞赛题的思维过程是丰富而曲折多变的,考虑问题必须全面。仅凭一时的“感觉”来编程往往是漏洞百出。初学者常常忘记做一些初始化工作(远不止变量赋初值这种最简单的),即使有经验的同学也难免因一时疏忽写出几个错误的语句。最要命的是“第一感觉”的算法是错误的或者效率太低,而程序编了大半才发现...做一些复杂的题目(以前复赛的题目其实没有特别复杂的,但今后可说不准),大多数人多会在一分心的时候突然短了思路,不知道下一步该写什么了。二,编码采取自顶向下,逐步求精的方法,调试时采用输出中间结果的办法及时找出错误的地方。可以这么说,思路越清晰,对自己程序的算法和编码越了解,调试也会越顺利(一定不要忽视)。 三、最大限度的发挥自己的水平
看上去是废话,但必须说,当临近比赛的时候,这一点绝对比提高自己的编程能力重要和实际的多。下面我谈谈从这几届分区联赛中得到的一些启示。 1.正确的估计题目的难度和自己的水平
初学者常常“意气用事”,拿到一道看起来很“爽”的题目就开始做了,其实这样不好。NOI99第二试的时候许多选手一开始就做第三题模拟题,看起来简单,其实要做好并不容易,所以不少人用了4小时都没有做出来,只好...有人虽然先做的第一题,但做完后也是去做第三题,做了3个小时却因为粗心...所以说,必须在平时训练一下对题目的规模,难点,编程调试复杂度等方面的估计,还要注意自己擅长哪方面,编程速度和准确度以及调试能力如何,结合自己对题目的估计,方能正确的选择题目和安排时间。 2.重视测试
能够做的题目常常得不了满分,这也属于发挥欠佳。但其原因不是自我估计不准,而是考虑问题不全面。一道自己有把握,有信心做好的题目一定要花大力气保证其正确性。记得NOI99第一试,有人第二题“几乎”编正确了的,却因为初始化有误,有人测试的数据可以通过,但评分时用的数据无一通过。 3.评分的唯一标准是测试数据
这不是鼓励大家“投机取巧”,意思是,一道困难的题目如果无法下手,在时间允许的情况下一定要写一个能解一些特殊情况的程序。例如去年分区联赛《旅行家的预算》一题,无解的数据和没有加油站的数据各一个,难道对于这两个情况的程序你还不会编吗?得一些分算一些嘛。还有“导弹追踪”一题有一个数据是升序排列的,难道你不知道这种情况是一次只能打一个吗?很多最优化题目,不要一个字都不写,根据你的“直觉”算法(例如贪心),虽然得不了满分,也能得一定的分数。反正又不是写解题报告,得多少算多少。
4.不怕一万,就怕万一
和编程序没有什么关系啦,提醒大家要多存盘什么的,最好保留一些不同版本(例如算法不同)的程序,便于选择修改。不要不当回事,小心点总是好事。我上次就因为...第二题编了两次(好在只多花了10分钟)
5、怎样准备复赛?
1.应该针对自身特点在时间不多的情况下,应该针对自己的特点来准备。下面是一个简单的自我评估方法 1.你参加过复赛吗?
2.你做过以前的竞赛题吗?(没有做过就在本站下载一份去做嘛!) 3.你知道复赛如何评分吗?
4.在算法十分熟悉的情况下,你平均输入100行代码需要多少时间? 5.你对那类题目最有把握? 6.你对那类题目最头痛?
7.程序编完后,调试成功需要的时间平均是编程时间的几分之几? 8.你满认为正确的程序,结果测试下来有错误的情况有多少? 9.你满认为正确的程序,结果测试下来几乎得0分的情况有多少? 10.你看完题目(包括验证样例数据)的平均时间是多少? 11.从看完题目到脑子里浮现出第一个算法的平均时间是多少? 12.从看完题目到最后决定采用哪种算法的平均时间是多少?
13.从决定算法到开始编码,你会先在做准备工作(eg.写伪代码)吗?需要多少时间? 14.在实现算法的时候突然发现算法是错误的,这种情况有多少? 15.程序编完后测试一些数据后发现算法是错误的,这种情况有多少?
16.程序写着写着写不下去了,因为觉得代码还需要写那么那么多...这种情况有多少? 17.程序写着写着写不下去了,因为不知道下一步该写什么了,这种情况有多少? 18.程序写着写着写不下去了,因为刚刚写过的代码突然看不懂了,这种情况有多少? 19.程序写完了,运行失败,你先静态查错,还是直接调试? 20.调试通一个100行代码的程序,你用的时间平均是多少?
21.调试了一段时间,仍然通不过,不知道该怎么办,这种情况有多少? 22.终于调试通过,竟然是笔误!这种情况是多少?
23.对于竞赛题,你有把握同时通过的程序有几分之几?这种“把握”通常是正确的吗? 24.你测试程序吗?是否只是使用样例数据? 25.测试时死机。这种情况有多少?
26.测试大数据时才发现你的程序效率存在严重问题,这种情况有多少? 27.测试大数据时才发现你的程序空间问题没有解决好,这种情况有多少? 28.测试一个数据失败,调试通以后你是否进行回归测试? 29.一般的题目你会花多少时间测试?
30.做一道简单的复赛题目,你一般需要多少时间? 31.做一道中等难度的复赛题目,你一般需要多少时间? 32.做一道困难的复赛题目,你一般需要多少时间? 33.平时做题你计时吗?
34.想好算法以后,你能较为准确的估计你将花的时间吗?
35.看完题目以后,你选择对于你来说最简单的题目吗?如果是,选择正确(的确比其他题目容易得分)的时候多吗?
36.对于不会做的题目,你能够想一个方法拿部分分吗?
37.你设计的测试数据和标准测试数据是否比较接近(指测试的方面,不是数据本身)? 想一想,这些问题本身也许就可以引起你的思考。 选出你认为最重要的,你又最差的方面集中训练。 2.熟悉复赛的形式,内容和题目的特点 复赛题目的特点是:
第一题:算法比较明显的,或者和数学关系比较大的题目。
第二题:好上手,但程序量要大一点的题目,考虑全面也不容易。 第三题:一般是搜索,或者算法不明显的题目。
算法方面,可能考到的是:搜索(回溯就可以了),动态规划(几乎是必考),贪心,递推(小心真的考到哦),递归...数据结构反而考得不多。熟悉字符串的操作和排序算法就差不多了。 练习以上内容可以做以前的复赛题或我的模拟题(难度比复赛略高一点) 一个好的方法是练习经典题目。
如:8皇后, 汉诺塔, 部分背包问题, FIBONACCI数列, 数字三角形...还有很多,主要还是靠平时积累。
3.选择自己最有潜力的方面专攻。
初学者是一般不可能做出所有的题目的,应该选一些自己平时最熟悉和有把握的题,一定要做对。记住,信息学竞赛最容易出现“一失足成千古恨”的情况。自己熟悉的题目要加强编程熟练度,准确度,测试和调试能力,把自己有能力拿到的分拿稳。
本文来源:https://www.wddqxz.cn/ce0d945827c52cc58bd63186bceb19e8b8f6ecf0.html