对拍就是当你的代码找不出错误又有暴力的程序并且对的程序时可以进行对拍
准备是一个数据生成的程序和正确代码和未ac代码和运行对比程序
举个例子:
a+b程序
正确代码
#include <stdio.h>
int main()
{
int a, b;
scanf("%d %d",&a, &b);
printf("%d\n", a+b);
return 0;
}
未ac或比对代码
#include<cstdio>
void getint(int &x){
x=0;
char ch=getchar();
while(ch>'9'||ch<'0') ch=getchar();
while(ch<='9'&&ch>='0'){
x=x*10+ch-'0';
ch=getchar();
}
}
int main()
{
int a,b;
getint(a);getint(b);
printf("%d",a+b);
}
数据生成程序
#include<cstdio>
#include<ctime>
#include<cstdlib>
int main()
{
srand((unsigned)time(NULL));//按时间生成
printf("%d %d\n",rand()%1000,rand()%1000);// 生成0-1000的随机数
}//rand%1000+1为生成1-1001的随机数以此类推
运行对比程序
#include<iostream>
#include<windows.h>
#include<ctime>
using namespace std;
int main()
{
int t=100,falg=0;
while(t--)
{
system("数据生成.exe > 数据生成.txt"); //生成数据
system("正确程序.exe < 数据生成.txt > 正确程序.txt"); //获得正确代码答案
system("对拍程序.exe < 数据生成.txt > 对拍程序.txt"); //获得未ac代码答案
if(system("fc 对拍程序.txt 正确程序.txt"))//不对跳出
{
falg=1;
break;
}
}
if(falg)
cout<<"error"<<endl;//输出错误
else
cout<<"no error"<<endl; //没错误输出
return 0;
}
上面的文件名一定要和原程序一样
比如:数据生成.exe可更改哦不过要保持一样