对拍就是你给两个程序和一个随机数据生成器,然后系统用随机数据生成器的输出数据作为你这两个程序的输入,比较这两个程序的输出,找到这两个程序输出不一样的一组数据。
data.exe是数据生成程序
test.exe是你需要检查的程序
AC.exe是正确的程序
这三个程序需要放在同一目录下,执行以下对拍程序即可
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{ long s,t;
while(1){
system("cls");
do{
system("data.exe > data.txt"); //data.exe是数据生成程序
s=clock();
system("test.exe < data.txt > try2.out"); //test.exe是你需要检查的程序
t=clock();
system("AC.exe < data.txt > try1.out"); //AC.exe是正确的程序
if(system("fc try1.out try2.out > nul")) break;
else printf("AC time: %ldms\n",t-s); //并输出运行时间
}while(1);
printf("WA time: %ldms\n",t-s); //运行时间
system("fc try1.out try2.out");
system("pause>nul");
}
return 0;
}
data.cpp举例,用于随机生成样例
#include<stdio.h>
#include<time.h>
#include<windows.h>
int main()
{
srand(time(NULL));//随机种子
int n=rand()%100;//生成100以内的n,m
int m=rand()%100;
printf("%d %d\n",n,m);
for(int i=0;i<n;i++)
printf("%d ",rand()%100);
puts("");
}