對拍就是你給兩個程序和一個隨機數據生成器,然後系統用隨機數據生成器的輸出數據作爲你這兩個程序的輸入,比較這兩個程序的輸出,找到這兩個程序輸出不一樣的一組數據。
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("");
}