谁适合看这篇文章?

  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)的更多相关文章

  1. [zt]手把手教你写对拍程序(PASCAL)

    谁适合看这篇文章? ACMERS,OIERS或其它参加算法竞赛或需要算法的人 对操作系统并不太熟悉的人 不会写对拍的人 在网上找不到一个特别详细的对拍样例的人 不嫌弃我写的太低幼的人 前言 在NOIP ...

  2. 手把手教你写Kafka Streams程序

    本文从以下四个方面手把手教你写Kafka Streams程序: 一. 设置Maven项目 二. 编写第一个Streams应用程序:Pipe 三. 编写第二个Streams应用程序:Line Split ...

  3. 手把手教你写LKM rookit! 之 第一个lkm程序及模块隐藏(一)

    唉,一开始在纠结起个什么名字,感觉名字常常的很装逼,于是起了个这<手把手教你写LKM rookit> 我觉得: 你们觉得:...... 开始之前,我们先来理解一句话:一切的操作都是系统调用 ...

  4. 手把手教你写Sublime中的Snippet

    手把手教你写Sublime中的Snippet Sublime Text号称最性感的编辑器, 并且越来越多人使用, 美观, 高效 关于如何使用Sublime text可以参考我的另一篇文章, 相信你会喜 ...

  5. 只有20行Javascript代码!手把手教你写一个页面模板引擎

    http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...

  6. [原创]手把手教你写网络爬虫(5):PhantomJS实战

    手把手教你写网络爬虫(5) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 大家好!从今天开始,我要与大家一起打造一个属于我们自己的分布式爬虫平台,同时也会对涉及到的技术进行详细介绍.大 ...

  7. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...

  8. 手把手教你写DI_3_小白徒手支持 `Singleton` 和 `Scoped` 生命周期

    手把手教你写DI_3_小白徒手支持 Singleton 和 Scoped 生命周期 在上一节:手把手教你写DI_2_小白徒手撸构造函数注入 浑身绷带的小白同学:我们继续开展我们的工作,大家都知道 Si ...

  9. 手把手教你写DI_0_DI是什么?

    DI是什么? Dependency Injection 常常简称为:DI. 它是实现控制反转(Inversion of Control – IoC)的一个模式. fowler 大大大神 "几 ...

随机推荐

  1. HTML标签<b>与<strong>以及<i>与<em>的区别

    在一般情况下,<b>和<strong>标签的显示效果一样,<i>和<em>标签的显示效果一样.那么它们的区别在哪呢?我们应该使用哪种标签呢? 在w3sc ...

  2. sql视图学习笔记--视图

    视图是为用户对数据多种显示需求而创建的,其主要用在一下几种情况: (1)限制用户只能访问特定表特定条件的内容,提高系统的安全性. (2)隐藏表结构.创建多种形式的数透视,满足不同用户需求. (3)将复 ...

  3. struts2+hibernate-jpa+Spring+maven 整合(2)

    1.修改pom.xml 1. 添加  slf4j-api <dependency> <groupId>org.slf4j</groupId> <artifac ...

  4. [Ecmall]ECMALL目录结构设置与数据库表

    最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方论坛连二次开发板块都没有,都在哪瞎扯淡,广告一堆.可悲~ ...

  5. hibernate annotation注解 主键ID自增长

    @Id @SequenceGenerator(name="increment") @GeneratedValue(strategy=GenerationType.AUTO, gen ...

  6. [杂题]FZU2190 非提的救赎

    中文题,题意不多说. 本来感觉很像dp 其实只要从上到下维护单调性就好了 坑是......这个oj......用cin很容易TLE...... //#include <bits/stdc++.h ...

  7. [数论]ZOJ3593 One Person Game

    题意:一个人要从A走到B  只能走a布.b步.(a+b)步,可以往左或右走   问 最少要走几步,不能走到的输出-1 可以列出方程 $ax+by=A-B$ 或者 $ax+(a+b)y=A-B$ 或者 ...

  8. codeforces #309 div1 D

    求最小值最大显然是要二分 二分之后转换成了判定性问题 我们考虑哪些点一定不能选 显然是将所有可选点选中之后依然不满足条件的点不能选 那么我们不妨维护一个堆,每次取出堆顶看看是否满足条件 不满足条件就p ...

  9. cocos2d-x 扩充引擎基类功能 引起的头文件重复包含问题的分析

    c++ 头文件包含 原因的分析:   c++  头文件的循环引用是指: .h 里面的里面的头文件的相互包含的,引起的重复引用的问题.cpp 里面包含头文件是不存在重复引用的问题(因为CPP没有#ifn ...

  10. HeadFirst设计模式之观察者模式

    一.什么是观察者模式 观察者模式定义了一系列对象间一对多的关系,当主题对象的状态发生变化时,会通知所有观察者 二.自定义观察模式 1. 2. package headfirst.designpatte ...