基于Linux(或者Mac OS X)的对拍程序

比赛时调程序的奇淫巧技之一:对拍。

程序bug调试不出来,但是能写一个暴力的保证正确的算法,并且直接提交暴力的程序会超时,于是这时候就可以用“对拍”来调试了。

由于ACM ICPC用的系统都是Ubuntu所以给出一个基于Linux的对拍程序(Mac OS X同样适用)​

data_maker :你写的能够随机生成数据的程序,注意生成数据的条件(有些题目对数据的要求比较高,这时候很难生成可以用的数据,所以对拍也是有局限性的)

​MyProg:你写的高效程序

StdProg:暴力的保证答案正确的程序

while true; do  
    ./data_maker > tmp.in #出数据  
    ./MyProg < tmp.in > my.out #被测程序  
    ./StdProg < tmp.in > std.out #正确(暴力)程序  
    if diff my.out std.out; then #比较两个输出文件  
        printf "AC\n"  #结果相同显示AC  
    elif diff -B -b my.out std.out; then  
        printf "PE\n"  
    else  
        printf "WA\n" #结果不同显示WA,并退出  
        exit 0  
    fi  
done  

上面这个程序需要保存成.sh的格式,例如:对拍.sh直接在终端里面运行

​运行方法:

打开终端 执行

方法一: 输入命令 ./aa.sh 

​方法二:直接把 aa.sh 拖入到终端里面。

​注意事项:

​如果 没有成功报出问题:: Permission denied。

就是没有权限。

​解决办法:修改该文件对拍.sh 的权限 :使用命令: chmod 777 对拍.sh 。

​然后再执行 上面第一步或者第二步的操作就 OK 了.​


附赠一个windows的对拍程序(转载于他人,侵删):对拍.bat

对拍程序的写法 如下

@echo off :

loop 

     datamaker #数据生成器 rand.exe > data.in 这里的大于符号,小于符号为重定向符号 
  std #标准程序 std.exe < data.in > std.out 
     myprogram #my.exe < data.in > my.out 我的程序
     fc ans.out std.out //比较两个程序的输出是否一致,一致则返回0
 if not errorlevel 1 goto loop 
 pause 
 goto loop
#最后上边的 内容 保存为. bat文件

#rand.exe std.exe my.exe 以及windows下的这个 .bat文件

放在同一个目录下***************************************************************************************************

这里数据生成器: 就是你自己编写一个应用程序 rand.exe,这个应用程序就是随机的生成一组符合题意的输入数据并存放到上边提到的 输入数据文件中data.in高效程序:就是上边提到的 高效算法 写的程序,即 my.exe

暴力程序 :就是指能够保证所有输入数据都能输出正确结果的 程序,即这里的std.exe上边的.

bat文件

的功能就是循环 判断高效程序和 暴力程序 在同样的输入数据情况下,输出数据是否相同,从而实现了对拍程序的功能


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值