【Tools】使用批处理文件对拍程序

关于对拍

OI比赛的时候经常会发生这么一种情况:
第X道题,写好了暴力并能够保证暴力的正确性,但突然想到了一个更为高效的算法,但无法确定程序是否正确,这个时候,就要使用对拍解决问题。
有些人是用c++程序进行对拍的,而我喜欢用bat文件(因为写起来短啊)。


我们假设这道题的题目名为problem,数据生成的可执行程序名为random.exe
两个程序的可执行程序名名称为problem1.exe和problem2.exe。

先发一波对拍效果图
这里写图片描述
最后一行是我打了Ctrl + C终止程序因为这样才能截图

两个版本的bat对拍

cpp内重定向写法

首先是第一种版本,就是三个源程序中都写了freopen,且random.exe的输出文件为problem.in,而两个程序所对应的输出为problem1.out和problem2.out
接下来就是对应的bat

@echo off
:loop
    random.exe
    problem1.exe
    problem2.exe
    fc problem1.out problem2.out
    if not errorlevel 1 goto loop
    pause 
    goto loop

bat内重定向写法

其次是第二种版本,就是三个程序的freopen都不被执行,相比来讲也更加随性,毕竟名字可以乱取了
对应的bat,效果和第一种是一样的。

@echo off
:loop
    random.exe > problem.in
    problem1.exe < problem.in > problem1.out
    problem2.exe < problem.in > problem2.out
    fc problem1.out problem2.out
    if not errorlevel 1 goto loop
    pause
    goto loop

两种代码可以自己参考使用,各有优劣。
对于bat内部的东西是什么意思还是解释一下吧虽然对拍这种东西靠背啊。

我拿第二个bat解释一下。
首先第一行@echo off关闭输入显示,如果你单纯地想确认一下正确性的话这句话就一定要打上,否则东西会太多的,如果不打,上结果图:
这里写图片描述
东西有点多,就很乱。。如果不想看到这种东西模糊你的眼睛就还是打上吧。
其次是第二行的:loop这是个标志,为了使用后面的goto。这个功能相信大家使用c++时一定为了好玩而使用过。
第三行random.exe > problem.in,意思是运行random.exe并将程序运行结果导入pr

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值