以前一直没有写过对拍,学生会拍但我一直只是观望,没有写过,今天请大佬学生讲了下如何对拍,感觉还比较好理解,因此记录下本文章用来以后的查错用。教学相长,很有道理!
以下对拍的目的是为了检查未确认的正解和确认的暴力在小数据的情况下找bug.
在同一个目录下准备的文件有 :
1.在确认中的标程:zzn.cpp
2.确认正确的暴力:baoli.cpp
3.写好的按题目要求生成的随机数程序:data.cpp
下面以某题来说说如何对拍。具体做法分成以下几步:
1.在同目录下新建文件cmp.sh,用gedit打开编辑,输入如下代码:
#!/bin/bash
while true; do
./data > data.in
./zzn.cpp < data.in > zzn.out
./baoli.cpp < data.in > baoli.out
if diff zzn.out baoli.out; then
printf "AC\n";
else
printf"WA\n";
exit 0;
fi
done
2.回到终端,cd定位到该目录,输入命令:sh cmp.sh
这样就可以看到程序在随机出来的数据运行结果进行比较,没有错误会显示AC,直到出现WA就会停止,并且能在data.in文件中看到导致两个程序运行结果不一样的数据。
3.接下来便可以通过这个数据来进行分析程序找bug了。