对拍程序c++

对拍就是你给两个程序和一个随机数据生成器,然后系统用随机数据生成器的输出数据作为你这两个程序的输入,比较这两个程序的输出,找到这两个程序输出不一样的一组数据。

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("");
}

猜你喜欢

转载自blog.csdn.net/chengdong996/article/details/81747315