前置知识
引入
假设你现在正站在某大型比赛的赛场上,面对着屏幕前的世纪难题大汗淋漓,对正解毫无思路,这时你应该怎么办呢?
在这样的情况下,你应该写出一个暴力代码,尝试骗得一部分分数。
然而,不甘于平凡的你怎能只获得可怜的 20 p t s 20pts 20pts呢?你要拿 100 p t s 100pts 100pts。
你绞尽脑汁,想到了一个“疑似正解”,这时你要怎么确定它是否是正解呢?
为了你的宏图伟业,你就要学习这样一种东西:对拍
对拍
对拍是干什么用的呢?
你写了一个暴力和一个“疑似正解”,你确定你的暴力是正确的,这时你要确定你的“疑似正解”是否正正确,这时你需要将暴力和“疑似正解”都输入相同的数据,看它们的输出是否相同。如果对于很多组数据都有相同的输出,我们就可以认为这个“疑似正解”应该就是正确的。
对拍由四部分组成:
- 一个随机数据生成器
- 你的暴力
- 你的“疑似正解”
- 对拍程序
我们以世纪难题为例,来尝试实现对拍。
首先,我们需要一个数据,注意,这个数据的范围不与题目的数据范围相同,而是要根据你的暴力,你的暴力要很快的将这个数据运行完毕,这样才能保证对拍的效率。
为了保证每次生成的数据都不同,我们要进行随机取值。具体参见随机数。
我们将产生数据的代码命名为shujv.cpp
,那么它编译出的EXE文件为shujv.exe
,我们还要将产生的数据输出到一个TXT文件里,命名为shujv.txt
。
shujv.cpp
内容如下:
#include<iostream>
#include<cstdio