对拍是什么?简单说就是把两个程序对于同一个输入的输出进行比较,没有问题就再来,有问题就停下来,你就可以找到你程序的问题所在了
很多时候,我们或许有一个标程(或者爆搜程序什么的,反正答案是对的),一个自己的程序,然而一组一组的数据经过我们的手动输入后并没有什么问题,可就是有错……
咋办,一个一个输数据得到什么时候啊,于是,一个很“高端”的东西诞生了——对拍。
关于对拍这个东西,之前的了解并不是很多,因为时间的问题,一场比赛很有可能一份题解都打不出来,更别说要打一份暴力一份正解了。(其实还是因为太弱…)
可是从今以后,需要涉及到的题的算法就更加复杂了,如果费很长时间打了一个不正确的算法,而且也不方便差错,那不就很伤了..于是我觉得要学习一下对拍
以上都是前言
对拍
对拍是一种被大佬们广泛推崇的方法,它可以验证算法是否正确,可以帮助非正确的算法进行差错。可谓是好处多多,然而,我为什么不去学这样高端大气的一个方法呢.. 主要是懒…
因为对拍需要写一个正解(暴力),一份伪正解(待检验的算法),还有一个数据生成器,一个脚本文件(c++也可以)。
Step1
首先就是暴力算法了,在考场上,需要写一个自己最有把握的暴力算法,以此来检验自己伪正解的正确性。这个就不再多赘述。
Step2
然后就是写好一份伪正解,作为被检验的代码。
Step3
到了最重要的数据生成器了,他的作用是生成一组数据,由正解运行一遍后生成标准答案,然后让伪正解来运行,再生成一组答案,将两份答案进行对比。得出结论。
首先是一个随机数生成函数1
2
3
4// 需要用到的库有<ctime> <cstdlib>
int random(int x) {
return (long long ) rand() * rand() % x;
}//生成一个在1 ~ n-1 之间的随机数