每次程序设计竞赛出成绩后,很多参赛者的第一反应,就是自己的分低了,想要申诉。
这里我的建议是:不要轻易申诉。
因为,程序的结果由机器判题。机器判题基本不会出错。
这里简单介绍一下编写完程序后到出结果的过程。
从编写程序到最终运行出结果,有两个过程:
第一是编译。在编译阶段,如果有语法错误,编译器会立马报错。
第二是运行。如果能运行结果,说明必然没有语法错误,但是可能有逻辑错误。比如,本来应该是加号,你误写成减号;或者本来应该是向左,你写成向右。减掉和向右都是合理的逻辑,但是与题意相反了,结果必然是错的。编译器是检查不出这种错误的,编译器想的是“反正你让我干嘛,我就为你干嘛”。这种错误,只能靠人类去排除了。
所以有些参赛者,运行出结果后,看到题目提供的测试数据运行结果都正确,就信心满满,认为自己的程序肯定没错。而事实上,程序还是可能出错的。假如题目提供的测试数据有两组,最终评分的数据有十组。
(1)假如你的程序有逻辑错误,但你恰好通过了测试数据,而最终评测的十组数据不包含题目中的那两组测试数据,并且这十组数据你全错了,那么你会得到0分。
(2)不管你的程序有没有逻辑错误,只要最终评测的十组测试数据包括了题目中的两组测试数据,既然那两组数据已经测试通过了,那么你至少可以得到20%的分数。至于你能不能拿到剩下80%的分数,就要看你的程序是否没有逻辑错误了。
至于评分的数据,是否包含题目中提供的测试数据,可能只有主办方和承办方知道了。参赛者也不需要关心。与其花心思研究这个,不如多花点时间学习算法。
所以,如果你觉得自己的分数低了,第一时间不要想着去申诉查看运行结果,而是把自己在考场里写的代码在家里还原一遍,然后再仔细核对程序,或者找老师核对也可以。如果这时能断定程序没有问题,再考虑申诉也不迟。
有些人可能没法还原考试时的代码,这恰巧也能说明你对这个程序的思路掌握的不够熟练。因为如果够熟练的话,几天内是可以完全复原的。
当然有些人申诉是为了查看程序在哪组数据出错了。这种想法当然是可以的。但前提是你得能还原出你当时写的程序,否则即使你拿到让你的程序出错的数据,也分析不出原先的程序错在哪。
另外,有些比赛的申诉是需要付费的,比如NOIP,我印象中申诉貌似要支付50元的费用。
顺便一提,中小学的算法竞赛,对参赛者是比较友善的。只要能通过部分评测数据的验证,就会得到部分的分数。成年人的算法竞赛,任何一组数据出错,都会导致参赛者得0分。更有甚者,比如俄罗斯Codeforces,会让参赛者互相hack对手的代码,一旦你的程序被对手找到任意一组无法通过验证的数据,那么你得到的就不是0分,而是负分,对方则会因此加分。
少儿编程答疑、算法答疑请加微信307591841或QQ307591841
公众号.jpg
网友评论