1. 需要准备的文件:
数据生成器:
数据生成器就是按照题目的输入格式自动随机生成一组数据的程序。假如我们要生成一组这样的数据:
$ n \qquad len $
$ a_1 \qquad a_2 \qquad a_3 \qquad a_4 \quad \dots \quad a_n $
其中上面两行是两个整数 $ n $ ,$ len $,下面是 $ n $ 个数组 $ a $ 中的整数 $ a_i $ ,那么我们的数据生成器就可以这么写:
#include <iostream>
#include <cstdio>
#include <ctime>
#include <algorithm>
using namespace std;
int main(){
srand(time(NULL));
int n=rand()%(15)+1;
int len=rand()%(n)+1;
printf("%d %d\n",n,len);
for(register int i=1;i<=n;i++) printf("%d ",rand()%100);
printf("\n");
return 0;
}
标程 && 自己的程序:
这个标程你随便去网上找个就可以了,或者自己写一个能够保证正确的暴力就可以了。然后在就是自己写的需要判断正确性的程序。
对排器:
对拍器就是一个脚本程序。这个脚本的工作就是先编译我们之前的程序,之后我们再不断用while
循环生成一组数据,在用这个数据输入进程序,在用两个文件保存运行答案。之后我们再用diff
来判断两个输出的文件是否一致。如果输出文件不一致,那么我们就退出对拍。再用这个数据去调试程序。
下面是对拍器的代码:
#!/bin/bash
# 下面三行是编译命令
g++ date.cpp -o date
g++ main.cpp -o main
g++ std.cpp -o std
while true; do
./date > input.in #将生成的数据保存进input.in文件里
# 接下来两行就是将input.in文件输入进程序里面,之后再将程序输出的内容保存进两个文件std.out与output.out里
./std < input.in > std.out
./main < input.in > output.out
if diff std.out output.out; then # 对比两个文件
printf "AC\n"
else
printf "Wa\n"
exit 0 # 如果两个程序输出内容不同就退出
fi
done
2.开始对拍
首先我们打开终端输入sh 对拍器名字.sh
。然后回车后就开始对拍了。如果出了什么错误可以在终端中输入chmod 777 对拍器名字.sh
就可以让对拍器有可执行程序权限。