手把手教你写对拍程序(PASCAL)
谁适合看这篇文章?
ACMERS,OIERS或其它参加算法竞赛或需要算法的人
对操作系统并不太熟悉的人
不会写对拍的人
在网上找不到一个特别详细的对拍样例的人
不嫌弃我写的太低幼的人
前言
在NOIP或是ACM比赛中,一个对拍程序的重要性不言而喻,再有一个效率较低的正确程序下(这是大前提,如果你连一个绝对正确的程序都无法保证的话,那还是不要考虑对拍了),他可以检验你的“高级算法”是不是正确。当然,正确性是完全无法保证的。一般对拍都会用随机函数生成数据,边界条件极限条件极有可能遇不上,也会有很多对拍程序NP交上去WA的情况。但对拍的效率是毋庸置疑的,他有很大的几率检查出你的程序中的错误,或许能多得上不少分。从数学期望角度来讲,对拍还是很划算的。
配置
电脑系统:Windows XP
PASCAL编译器:Free Pascal 2.4.0
过程
我们以a+b问题为例:
首先你要写一个完全正确的程序
a.pas
然后你要写一个不一定完全正确的程序
b.pas
(当然,由加法交换律可知这个程序也完全正确)
数据生成器也是需要我们自己写的
maker.pas
这里只需要写出一组数据的生成就可以了,不用去做下面这样的东西,这样反而会让对拍无法进行,聪明的系统会一遍一遍的调用你的数据生成器的。
while true do
begin
randomize;
write(random(maxint));
end;
再编译程序,可以不去运行。
(虽然我知道几乎没有人会这么干,不过我还是想提一句,一定要编译程序啊亲!)
然后我们右键桌面上IDE的快捷方式,打开属性:
点击查找图标,到了这样一个文件夹:
为了方便查找,我们可以按修改时间排序,"xx.pas"是我们的源码,但这不是我们想要的,“xx.exe”才是我们的目标,于是我们把用蓝线标注的三个exe文件取出来,单独放到一个地方。
接着是关键的一步,我们需要一个什么东西实现这个对拍功能。
当当当当!某bat文件闪亮登场:它把数据生成器和你的两个程序集合在一起,有机的做到比较%……&&……¥%#¥%#¥@%#¥
好,我们新建一个txt文件(其实什么文件都行,有后缀名不是文件夹什么的就行),把它改成"xx.bat"这样的格式,bat是文件后缀,然后用记事本打开,在里面输入
:loop
maker.exe
a.exe
b.exe
fc out.txt out.txt
if errorlevel 1 goto end
goto loop
:end
这是DOS语言,意思差不多是这样的:
loop//循环
maker.exe//运行 数据生成器
a.exe//运行 正确程序
b.exe//运行 待检测程序
fc o1.txt o2.txt//比较 两个程序的输出结果
if errorlevel 1 goto end//如果 有错误(两个输出文件不一样) 就跳到end
goto loop//跳到loop
:end
就像这样:
我们把bat哥和那三个exe拉到一块,就F盘吧
都准备好了,怎么运行呢?
点开你的开始菜单,打开运行,输入cmd后点确定
(PS:cmd命令提示符可是程序猿必备神器,不会cmd都不好意思出门了)
把当前处理位置移到你放对拍程序的地方,输入你的对拍程序名
按下回车,看你的程序“哗哗哗”的运行就好了
诶?怎么没有结果,我怎么知道对不对?
不对人家会停止的,如果程序一直在跑还想查看结果的话可以右键
找不到,相异处,两个程序结果吻合,OK了。
(一个A+B吻合有什么软用吗o(╯□╰)o)
PS:
1.程序检测的是执行程序,而不是源程序。所以每改一次源程序都要编译一次。
2.dos中不识别 .in .out 文件,所以要用 .txt
3.衷心希望这篇文章能对大家有所帮助,谢谢。
本文原创,转载请说明出处,欢迎用于学习方面的交流,用于商业用途前请先联系作者。http://www.cnblogs.com/yangqingli/
手把手教你写对拍程序(PASCAL)的更多相关文章
- [zt]手把手教你写对拍程序(PASCAL)
谁适合看这篇文章? ACMERS,OIERS或其它参加算法竞赛或需要算法的人 对操作系统并不太熟悉的人 不会写对拍的人 在网上找不到一个特别详细的对拍样例的人 不嫌弃我写的太低幼的人 前言 在NOIP ...
- 手把手教你写Kafka Streams程序
本文从以下四个方面手把手教你写Kafka Streams程序: 一. 设置Maven项目 二. 编写第一个Streams应用程序:Pipe 三. 编写第二个Streams应用程序:Line Split ...
- 手把手教你写LKM rookit! 之 第一个lkm程序及模块隐藏(一)
唉,一开始在纠结起个什么名字,感觉名字常常的很装逼,于是起了个这<手把手教你写LKM rookit> 我觉得: 你们觉得:...... 开始之前,我们先来理解一句话:一切的操作都是系统调用 ...
- 手把手教你写Sublime中的Snippet
手把手教你写Sublime中的Snippet Sublime Text号称最性感的编辑器, 并且越来越多人使用, 美观, 高效 关于如何使用Sublime text可以参考我的另一篇文章, 相信你会喜 ...
- 只有20行Javascript代码!手把手教你写一个页面模板引擎
http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...
- [原创]手把手教你写网络爬虫(5):PhantomJS实战
手把手教你写网络爬虫(5) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 大家好!从今天开始,我要与大家一起打造一个属于我们自己的分布式爬虫平台,同时也会对涉及到的技术进行详细介绍.大 ...
- 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接
本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...
- 手把手教你写DI_3_小白徒手支持 `Singleton` 和 `Scoped` 生命周期
手把手教你写DI_3_小白徒手支持 Singleton 和 Scoped 生命周期 在上一节:手把手教你写DI_2_小白徒手撸构造函数注入 浑身绷带的小白同学:我们继续开展我们的工作,大家都知道 Si ...
- 手把手教你写DI_0_DI是什么?
DI是什么? Dependency Injection 常常简称为:DI. 它是实现控制反转(Inversion of Control – IoC)的一个模式. fowler 大大大神 "几 ...
随机推荐
- NOSQL Mongo入门学习笔记 - MongoDB的安装(一)
手上的工作不是很忙,所以来学习学习很久就像接触的MongoDb,无奈前段时间工作时间都比较多.记录在这里供以后参考 环境: Centos 7 64位 开始: 1. 在官网下载Mongo : wget ...
- button以回车方式提交
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 1071: [SCOI2007]组队 - BZOJ
Description NBA每年都有球员选秀环节.通常用速度和身高两项数据来衡量一个篮球运动员的基本素质.假如一支球队里速度最慢的球员速度为minV,身高最矮的球员高度为minH,那么这支球队的所有 ...
- 深入js的面向对象学习篇(封装是一门技术和艺术)——温故知新(二)
下面全面介绍封装和信息隐藏. 通过将一个方法或属性声明为私用的,可以让对象的实现细节对其它对象保密以降低对象之间的耦合程度,可以保持数据的完整性并对其修改方式加以约束.在代码有许多人参与设计的情况下, ...
- 团体程序设计天梯赛-练习集L1-008. 求整数段和
L1-008. 求整数段和 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 杨起帆 给定两个整数A和B,输出从A到B的所有整数以及这些 ...
- Kafka server的的停止
这算是CountDownLatch的一个典型使用场景. kafka.Kafka对象的main方法中与此有关的代码为 // attach shutdown handler to catch contro ...
- eclipse代码自动提示功能设置
一 般默认情况下,Eclipse ,MyEclipse的代码提示功能是比Microsoft Visual Studio的差很多的,主要是Eclipse ,MyEclipse本身有很多选项是默认关闭的, ...
- a标签的link、visited、hover、active的顺序
a标签的link.visited.hover.active是有一定顺序的,以下是我一直在用的一个顺序,能正确显示四个颜色,我也不知道有没有其他的顺序能正确显示,如果你没办法判断哪个是对的,那就先用这个 ...
- HandlerThread 类的学习(转载)
HandlerThread继承于Thread,所以它本质就是个Thread.HandlerThread类用于方便的创建一个含有looper的线程类,looper用来创建handler类.我们一般不创建 ...
- SPRING IN ACTION 第4版笔记-第九章Securing web applications-002-把用户数据存在memory里(AuthenticationManagerBuilder、 UserDetailsManagerConfigurer.UserDetailsBuilder)
Spring Security is extremely flexible and is capable of authenticating users against virtually any d ...