基于Linux(或者Mac OS X)的对拍程序
来源:互联网 发布:随机数抽奖软件 编辑:程序博客网 时间:2024/06/07 06:06
比赛时调程序的奇淫巧技之一:对拍。
程序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文件的功能就是循环 判断高效程序和 暴力程序 在同样的输入数据情况下,输出数据是否相同,从而实现了对拍程序的功能
- 基于Linux(或者Mac OS X)的对拍程序
- mac os 程序对拍(同Linux对拍) 以及c++文件读入
- mac os下编写对拍程序
- Linux 下的对拍程序..
- MAC OS X下的Linux环境
- 对拍程序的写法
- 【技巧】程序的对拍
- 对拍程序(bat)
- Mac OS X 架设基于 SSH 的 Git 服务
- Mac OS X搭建基于hexo的静态博客站点
- 对Mac OS X这个系统的使用印象
- MAC OS X下nuXmv对libxml2版本的要求
- Linux下脚本对拍程序
- Mac OS X: login之前/之后启动程序的方法
- Mac OS X: Google自动更新程序的卸载
- Mac OS X: Launchd执行程序的一个例子
- Mac OS X: 登录/退出自动运行程序的设置
- MAC OS X的文件关联和打开程序
- CentOS 7拨号上网(ADSL & PPPoE)
- C# 简单的 get set
- 求最大最小及平均值
- 打印实心菱形
- Intent返回数据给上一个活动
- 基于Linux(或者Mac OS X)的对拍程序
- Tomcat容器启动时,报java.io.EOFException异常
- Junit学习笔记之二:hamcrest简介和TestSuite
- HTML学习小记
- android控件的对齐方式(转)
- 集合转数组和数组转集合
- 必看人生道路上的100个真相
- 打印空心菱形
- 稀疏矩阵三元组转化