信息学奥赛三个拿分技巧
避免易犯错误
竞赛中常见的错误有:忘了加读写文件语句,程序无法编译成功,忘了写return 0,文件名、文件夹等错误,个人信息错误等。
这种易犯错误,有的选手训练一下就可以避免,但有些选手特别难纠正,我遇到的某些选手,我觉得可以这么试一下,把这些注意事项在考试的时候,以背景图的方式放在桌面上,时时提醒自己。
考试结束分钟,一定要停止写代码,逐项检查是不是犯了这些错误,有的学生比赛没经验,想的还有几分钟,我赶紧再写两行代码,也许就可以把这道题做对,我告诉大家,想象是美好的,现实是残酷的,这么做的后果,基本就是题仍然没做对,而且因为匆忙,忘写读写文件了,忘建文件夹了之类的小错误导致更多的失分。
实际上,大家可以看到《编程竞赛宝典》一书中,有些题目的文件名比较长,而且大小写混写,这么做的目的就是考察你是不是因为粗心把文件名写错了。
制作测试数据
题目写完后,并不是通过测试样例就可以的。
首先,出题者往往会在测试样例上做文章,导致选手被测试数据误导。比如某些题目是需要排序后才能进行处理的,但是输入的测试数据故意给个已经排好序的数据,选手可能就以为所有的数据都是已经排好序的。
其次,为了更好地区分不同层次的选手,命题人会考虑各种不同情况,精心的生成每一组数据,而不是随机生成或全是极限数据,否则测试数据组数的增加就没有了意义。除了增加测试数据的组数,多个小问部分分、优劣程度部分分、超时程度部分分都是增强区分度的有效方式。
所以为了验证我们的程序正确性,需要自制一些测试数据。
在《编程竞赛宝典》一书的3.2节,介绍了怎样制作测试数据。以一个简单的高精度加法来说,首先要考虑一些特殊数据是不是可以通过。再考虑极限数据行不行,较后,才考虑随机数据。
之前有学生自创了一些题目,有一道题他生成了五十组测试数据,但这些数据全是随机生成的,这些随机生成的数据,其实做一百组,两百组,基本都是同一类型的,没什么区分意义,所以我随手做了几个非常简单的数据,一下就卡了他的代码。
对拍
对拍是用朴素但费时的例如枚举、搜索等方法写一个测试代码,和准备要正式上交的代码输入同样的随机数据,以检测输出结果是不是一样的技术,这种方法可以有效地避免因粗心大意而导致的失分。