对拍


前言

与其去写一个不确定的正解,不如老老实实回来对拍,
$ \ \ \ \ $对拍可能拯救你的一个会做但是由于小错误爆零的程序

步骤

如何对拍?

前置:此程序为在win系统环境下的对拍

$ 1. $准备一个你写的可能是正解但不确定的程序和一个暴力程序(暴力程序需要保证是正确的)

$ 2. 设我们要对拍的程序为 Orz.cpp ,正确的程序为 Orz2.cpp $

$我们要写一个随机生成数据的程序 RandData.cpp $

$将这三个文件放在一个文件夹 Pai 里面,运行,得到三个 exe $可执行文件

$ 3. 写一个对拍程序 Pai.cpp $,程序实现如下:

#include 
#include 
using namespace std;
const int Try_Times = 1000;
int cnt = 1, t1, t2;

int main(void) {
	while(cnt != Try_Times) {
		system("RandData.exe > try.in");
		t1 = clock();
		system("Orz.exe < try.in > try1.out");
		t2 = clock();
		system("Orz2.exe < try.in > try2.out");
		if(system("fc try1.out try2.out > nul")) {
			printf("On test #%d: Wrong answer , time: %d ms\n", cnt, t2 - t1);
			break;
		} else {
			printf("On test #%d: AC , time: %d ms\n", cnt, t2 - t1);
		}
		cnt++;
	}
	system("pause > nul");
	return 0;
}

$ \ 4. \ 实现原理:随机生成一组数据 \ try.in \ ,程序 \ A.cpp \ 得到结果 \ try1.out \ ,程序 \ B.cpp \ 得到结果 \ try2.out \ ,
比较 \ try1.out \ 和 \ try2.out \ 结果是否相同,
如果相同,测试下一组随机数据,否则跳出,此时的 \ try.in \ $文件里的数据就是错误数据