谁适合看这篇文章?

  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.衷心希望这篇文章能对大家有所帮助,谢谢。

[zt]手把手教你写对拍程序(PASCAL)的更多相关文章

  1. 手把手教你写对拍程序(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. Jquery中数值求和及根据余数改变对应的数值样式

    Jquery内容 <script type="text/javascript"> $(function () { var num = 0; $(".box o ...

  2. ElasticSearch : APT-GET安装方式

    Ubuntu下安装ES 新建非ROOT管理员用户 安装和配置JDK 打开下面的地址 https://www.elastic.co/guide/en/elasticsearch/reference/cu ...

  3. CAT 安装运行配置教程

    CAT安装教程 首先安装mysql数据库,具体步骤参阅<mysql免安装教程>--http://www.cnblogs.com/halberts/p/8723938.html 下载CAT代 ...

  4. PADS随记

    在PADS,PCB板设计中,怎么一次就把丝印的大小设置好? CTRL+ALT+F  组合键 打开 选择过滤器(Filter) 如下图 去掉其他的勾选,只选择 Labels . 之后在板子上鼠标拖动选上 ...

  5. django基本配置项-5

    目录 BASE_DIR 项目路径 DEBUG 模式 ROOT_URLCONF DATABASES 数据库设置 国际化 静态文件 访问静态文件示例 ALLOWED_HOSTS TEMPLATES 模板设 ...

  6. Java学习笔记十五:Java中的成员变量和局部变量

    Java中的成员变量和局部变量 一:成员变量: 成员变量在类中定义,用来描述对象将要有什么 成员变量可以被本类的方法使用,也可以被其他类的方法使用,成员变量的作用域在整个类内部都是可见的 二:局部变量 ...

  7. 详解CSS中的几种长度px、em、pt

    说说css的几种距离吧,大致有px.em.pt.pc.in.mm.cm.ex八种,其中最常见到的是px,我还见到过的有ex和mm.cm,当然后两个在当年见的更多. 其实px,我们最熟悉,而在电脑上也应 ...

  8. (数据科学学习手札37)ggplot2基本绘图语法介绍

    一.简介 ggplot2是R语言中四大著名绘图框架之一,且因为其极高的参数设置自由度和图像的美学感,即使其绘图速度不是很快,但丝毫不影响其成为R中最受欢迎的绘图框架:ggplot2的作者是现任Rstu ...

  9. Java设计模式(10)——结构型模式之代理模式(Proxy)

    一.概述 概念 UML简图 实际使用的场景示例 如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待 ...

  10. hdu 2031 进制转换(栈思想的使用)

    进制转换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...