流程
(如果有错误可以指出)
首先要有待测程序sol.exe与绝对正确的std.exe
这两个可执行文件都被要求有生成输出文件的作用(不重名)。
其次是数据生成器,一般生成随机数据,必要时写特殊数据生成器。
它被要求可以生成输入文件,输入文件中的数据应当满足一定标准。
最后是对拍器,对拍器应能代替人手进行以下流程:
1.造数据
2.运行sol.exe
3.运行std.exe
4.对比输出文件,并显示错误。
5.从第1步开始
eg
造数据……
#include<bits/stdc++.h>
#include<ctime>
using namespace std;
int random(int n) {
return ((long long)rand() * rand() )% n;
}
void make_arr(int n) {
for(int i=1;i<=n;++i) printf("%d ",random(1001));
putchar('
');
}
void make_qus(int q,int n) {
for(int i=1;i<=q;++i) {
int op=random(2);
int x=random(n)+1, y=random(n)+1;
if(y<x) swap(x,y);
printf("%d ",op);
if(op==0) {
int k=random(1001);
printf("%d %d %d
",x,y,k);
}
else {
printf("%d %d
",x,y);
}
}
}
int main() {
freopen("data.in","w",stdout);
srand((unsigned)time(0));
int n=random(101)+1;
printf("%d
",n);
make_arr(n);
int q=random(106)+1;
printf("%d
",q);
make_qus(q,n);
fclose(stdout);
return 0;
}
对拍
#include<bits/stdc++.h>
#include<ctime>
using namespace std;
int main() {
for(int i=1;i<=50;++i) {
system("random.exe");
int st=clock();
system("sol.exe");//暴力
int ed=clock();
system("std.exe");//正式代码
cout<<"测试点 "<<i<<" :";
if(system("fc data.out std.ans")) {
cout<<"Wrong Answer
";
return 0;
}
else {
cout<<"Accepet
"<<"Time:"<<ed-st<<'
';
}
}
}