浅谈信息学竞赛考场策略及程序测试
主题
本文作者是江苏省常州高级中学吴翼同学发布的信息学竞赛江苏省论文。内容对于大家备考十分有帮助,特分享给同学们,希望在中秋假期给大家的学习增加一点动力!
考场策略和程序测试是信息学竞赛中非常重要的环节,很多优秀的选手在很多比赛中总是会在这两个环节上犯下这样和那样的错误,导致得到的分数和实力不成正比,最后留下了无尽的遗憾。本文将探讨一些这两个环节上值得注意的地方,提出一些可行的方法,分享一些经验,以此希望帮助选手们在比赛中发挥水平,减少失误,告别遗憾。
前言
信息学竞赛本身是一个美好的东西,她包含着奋斗、努力、追求、成长、汗水和收获。一个选手从与其接触,到了解,再到热爱,无数的时间与之为伴;同样,信息学也给予了我们太多:给予了友情,老师的关怀,太多的希冀、责任和无数难以忘怀经历。
可是,太多的时候,信息学竞赛总是透着那么多的忧伤,似乎她带来的美轮美奂的精彩总被那些无可奈何的泪水和发自内心的懊悔所掩盖。
遗憾——如此悲情的字眼的不停出现,似乎把本该光鲜的信息学竞赛抹上了灰色。
遗憾,那么伤痛,寻根溯源,笔者希望以此文,让大家发挥水平,让这个词语永远的离大家而去。
一、简介
1、什么是考场策略?
一场信息学竞赛,比赛时间从 3 个小时到5 个小时不等,题目从 3 题到 4 题不等。在这样的一个长时间的过程里,如何分配时间,如何对待手上的题目,用什么方式和顺序对待手上的题目等等一系列的决策问题,我们称之为考场策略。
2、什么是程序测试?
程序测试就是在写完程序后,利用各种方式检验程序正确性的过程。
3、二者有什么关系?
概要的说,考场策略包含了程序测试这一个环节,因而本文中,对于考场策略我们讨论的是一个总揽全局的安排,而程序测试讨论的则是具体的实施方法。
可以说,考场策略的制定在程序测试之前,而程序测试又能影响到考场策略的实施。
二、考场策略
一个完整的测试包括审题,思考,做题,检验这几个环节,我们将分开讨论这几个步骤。
1、审题
【建议 1】一场测试应该花至少 30 分钟来审题,并做相关笔录。
1.1重要性
很多同学觉得这花去的时间太多了,大大占用了之后的解题时间。但是无数的事实告诉了我们审题的重要性,无数的遗憾正是由审题开始的。
【实例 1】 NOI2008 Day1 party 具体题目略。
事实:
此题是NOI2008 day1的第一道题,也是最容易拿分的题目,此题有50%的小数据,因此使用暴力枚举算法能够至少拿到 50 分。而悲剧也正从这一刻开始了。
注意题目中这样一句话:“输出文件party.out包含两个数,第一个数为最大可能的面具类数,第二个数为最小可能的面具类数。”也就是说,假设输出的两个数为A和B,那么应该满足A>=B。
题目描述清晰。可是,现场江苏省队11人中,仅四人看对这一条件,其他7人均将小的那一个先输出,再将大的那一个输出。因此7人最高分仅30分。其中一人损失近 70分。
原因分析:
客观原因:
1、样例中输出的两个数是一样的,并没有体现需要题目描述;
2、以往所有的题目都是先输出小的再输出大的,而这一次比较特殊。
主观原因:
据事后交流,所有人都没有花足够的时间在审题这一环节上,而是花了更多的时间在算法思考和程序设计上。对题目的理解过分依靠直觉和以往经验。
【实例2】APIO2009 convention 具体题目略。
事实:
注意题目中有这样对方案的描述:“首先,将租借给客户数量最多的策略最为候选,将所有的公司按照他们发出请求的顺序编号。对于候选策略,将策略中的每家公司的编号按升序排列。最后选出其中字典序最小的候选策略作为最终的策略。”
这段描述一共有三句话,本届江苏省队11人中有6人(包括笔者)都看清楚了第一句话和最后一句话,但都没有注意到第二句话,因而此题均为0分。
而此题有50%的小数据,即用替代算法也可得到50%的分数。此外,事实证明利用错误的贪心算法也可以得到50分左右的分数。以笔者为例,笔者如果此题加上50分则将得到国际金牌,其遗憾不言而喻。
原因分析:
客观原因:
1、这道题目描述比较冗长,这一句条件并不是很显眼,并且去掉这个条件仍然是一道复杂度相同的问题;
2、样例和题目举的例子中均未体现这一个条件。
经过交流,所有看错此题选手,均是由于题目描述的冗长,为了节省时间,未能仔细斟酌文字描述,而是直接通过题目的例子来理解题目,因而主观的忽略了这一个条件。
分析一下上述两个例子,可以发现一些共性。
大家的目的都是为了快速的理解题目,都是过多的相信了经验和习惯,都是只关注题目所给样例。可见,发生这种悲剧的原因都属无视了审题这一环节的重要性!
到这里显然笔者已经不用再重申审题环节的重要性了。
不要因为某一次成功的因为经验或者小聪明节省了几分钟的写程序的时间而沾沾自喜,这样的做法如果成为了习惯,那么遗憾将是必然的。
1.2标记法
为了解决这一问题,笔者总结了一些方法,称其为标记法,基本的方式都是用笔在纸制题目上进行标记。
关键字:对于题目中的一些关键字,将其圈出
所谓关键字就是比较级,最高级等形容词,和一些关键的名字。
序号:对于一些定义冗长的描述,每一步的限制都标上序号,从而明确对题目的理解
建议是做到每一个标点后都要做一定的标记,这样避免漏掉一些描述。当然也可以不用每个标点后都写数字,如果两个短句都在说同一个事情,那么可以用一个点,或者一个三角来表示后一个短句的步骤和上一个短句相同。
回顾:不断回顾重点细节
对于一个一下子难以看懂的描述,建议先做一个标记,比如问号,看完后再对这些打问号的地方重新审视,可以写一些对这些地方的理解。
形象和抽象:将形象的问题抽象,对抽象的问题形象
对于一个形象的问题,我们往往需要对其进行抽象,进行数学建模;而对于一个过于抽象的问题(比如CTSC2009 day1 sequence),我们则需要进行形象的思维。
建议将这些经过分析的东西写在题目描述的旁边或者后面。
比如对于上面提到的实例2中的那句被大家忽略的描述,就可以如此标记:(1)首先,将租借给客户(a)数量最多的策略最为候选,将所有的公司按照他们(b)发出请求的顺序编号。(2)对于候选策略,将策略中的每家公司的(c)编号按(d)升序排列。(3)