ACM对拍程序过程。。。
一、用随机程序生成符合题目的输入数据文件名为in.txt
如何产生随机数:
http://www.cnblogs.com/lvsi/archive/2011/04/21/2024079.html
二、用AC的程序和你的程序分别跑数据in.txt
AC程序生成out1.txt 你的程序生成out2.txt
在生成输出数据的时候最好把输入的一些关键数据也一并输出,这样避免回头在in.txt中找对应的哪组输入是WA的数据
三、在两个输出数据的所在目录下新建一个txt 输入
fc out1.txt out2.txt
pause
另存为.bat的扩展格式。。。 最后运行这个bat文件就OK了。
fc 是file compare 的缩写,pause 是为了让比较结果停止以便查看。
fc 只显示每组差异中的第一行和最后一行,而不是显示所有不同的行。
所以在输出的时候不要输出太多的换行!!!
@echo off :ac e-make>e.in :出数据 e-3<e.in>e.out :被测程序 e-2<e.in>e.out2 :暴力程序 fc e.out e.out2 :diff -q e.out e.out2 这句可以代替上一句 if errorlevel=1 goto wa echo ac goto ac :wa echo wa :type e.out e.out2 :这句可有可无 pause 退出状态 此命令返回下列退出值: 0 未找到不同处。 1 找到不同处。 >1 发生错误。
ACM linux对拍模板 shell脚本(详细注释版)
while true; do ./make>tmp.in #出数据 ./tmp<tmp.in>tmp.out #被测程序 ./tmp2<tmp.in>tmp2.out #正确(暴力)程序 if diff tmp.out tmp2.out; then #比较两个输出文件 printf AC #结果相同显示AC else echo WA #结果不同显示WA,并退出 #cat tmp.out tmp2.out exit 0 fi #if的结束标志,与C语言相反,0为真 done # while的结束标志 #BY NICK WONG 2014-08-29 #在终端下,进入当前目录,输入"sh ./nick.sh",(其中nick.sh为当前shell脚本名) '#'表示单行注释 #diff在两文件相同时返回空串