转自Hist!
介绍
对拍是信息学竞赛中重要的技巧,它通过一个效率低下但正确率可以保证的程序,利用庞大的随机生成数据来验证我们的高级算法程序。对拍最大的优势在于可以通过人力所不能及的速度和数量达到验证的效果。下面我们来看一下简单的对拍程序该如何编写
举例
给定一个自然数n (n<=50000),求解1+2+3+...+n的和。
test1.cpp //算法程序1
test2.cpp //算法程序2
data.cpp //数据生成器
compare.cpp //比较程序
说明
test1.cpp和test2.cpp都是我们所写的算法程序,其中test1.cpp使用朴素的for循环求解,代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
test2.cpp利用公式计算,代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
data.cpp是我们写的数据生成器
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
而compare.cpp则是对拍程序的主体
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
将四个文件编译后的可执行文件放到一个文件夹里,用mdfind 文件名 查找文件夹地址,cd进入这个文件夹,输入 ./compare 即可运行。
Tips
1.“./”表示当前目录下,如果在终端中输入的是./compare 的话就已经默认在当前目录里了,程序里不写“./”也是可行的。
2.diff函数在得到不同的比较值时会返回“1”。
3.mac os下对比是没有提示的,知道有不同的结果出现时才有所提示。所以建议自己写的时候附带提示功能。