谁适合看这篇文章?

  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. 多智能体仿真环境 NetLogo

    http://ccl.northwestern.edu/netlogo/ 创建agentcreate-turtles 10 动一动ask turtle 0 [forward 10 right 90 l ...

  2. 10+ 最流行的 jQuery Tree 菜单插件

    jstree – jQuery Tree Plugin With HTML & JSON Data jstree is a lightweight and flexible jQuery pl ...

  3. Nginx 禁止访问某个目录或文件的设置方法

    如果基于WEB根目录下,要禁止用户访问/config目录,或者要禁止用户访问/config.ini(ZF常用INI,不过建议还是放到WEB目录以外的地方),可以通过location进行配置,返回403 ...

  4. [转载]jQuery 1.9 移除了 $.browser 的替代方法获取浏览器类型

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support . 在更新的 2.0 版本中,将不再支持 IE 6/7/8. ...

  5. PAT-乙级-1020. 月饼 (25)

    1020. 月饼 (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 月饼是中国人在中秋佳节时吃的一种传统食 ...

  6. 搭建 Android 开发环境,初试HelloWorld (win7) (上) (转)

    搭建Android开发环境主要有以下几步要做: 1.JDK安装 2.Eclipse安装 3.Android SDK安装 4.ADT安装 5.创建AVD 1.JDK(Java Development K ...

  7. Codeforces Round #240 (Div. 2)(A -- D)

    点我看题目 A. Mashmokh and Lights time limit per test:1 secondmemory limit per test:256 megabytesinput:st ...

  8. linux ps查看进程命令

    linux ps查看进程命令ps命令作用:将某个时间点的程序运作情况撷取下来 实例: [root@linux ~]# ps aux [root@linux ~]# ps -lA [root@linux ...

  9. c#调用命令行遇到带空格的路径

    想用 c#调用如下的DOS命令: C:\Program Files\Common Files\System\DBWatcherInstall\dtexec.exe /f C:\Program File ...

  10. [矩阵快速幂]HDOJ4565 So Easy!

    题意:给a, b, n, m 求 $\left \lceil ( a+ \sqrt b )^n \right \rceil$ % m 看到 $( a+ \sqrt b )^n$ 虽然很好联想到共轭 但 ...