对拍
前言
与其去写一个不确定的正解,不如老老实实回来对拍,
$ \ \ \ \ $对拍可能拯救你的一个会做但是由于小错误爆零的程序
步骤
如何对拍?
前置:此程序为在win系统环境下的对拍
$ 1. $准备一个你写的可能是正解但不确定的程序和一个暴力程序(暴力程序需要保证是正确的)
$ 2. 设我们要对拍的程序为 Orz.cpp ,正确的程序为 Orz2.cpp $
$我们要写一个随机生成数据的程序 RandData.cpp $
$将这三个文件放在一个文件夹 Pai 里面,运行,得到三个 exe $可执行文件
$ 3. 写一个对拍程序 Pai.cpp $,程序实现如下:
#include <bits/stdc++.h>
#include <windows.h>
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 \ $文件里的数据就是错误数据