【技巧】算法竞赛中对拍程序的写法

在竞赛过程中一个对拍程序可以帮你排除许多错误,

如果担心自己写的正解被一些小数据卡掉,

我们通常会写个对拍程序来检查正解的正确性,

通过大量数据观察正解与暴力的输出是否相同。

我们首先拿出我们写的可能会超时但是可以保证绝对正确的暴力程序,称作bf.exe

然后拿出我们写的待检测的正解,称作std.exe

接着我们写一个随机数据生成程序,用来一次生成一组自制随机数据用来检测输出,称作gen.exe

然后我们来写一个利用windows批处理的对拍程序。

在你的程序的根目录下新建一个称作check.bat的文档,

用编辑软件打开这个批处理文件,添加如下代码:

@echo off
:loop
gen.exe > data.in
std.exe < data.in > std.out
bf.exe < data.in > bf.out
fc std.out bf.out
if not errorlevel 1 goto loop
pause
goto loop

第一行echo off作用是关闭多余显示,这样可以只让对拍程序显示对拍信息。

第二行loop作用是循环,一直进行下面的操作。

大于号代表输出重定向,可让运行的程序的输出结果输出在特定的文件中。

小于号代表输入重定向,可让运行的程序从特定的文件读取输入信息。

第六行fc操作代表对比两个文件,结果会显示在控制台中。

第七行代表如果没有拍出错误就再返回第二行loop进行下一次对拍。

第八行pause就是c语言中sysem("pause")的操作。

第九行可以在pause之后进行第二轮对拍。

写完了这个批处理程序就可以保存退出运行对拍了。

祝大家在竞赛中拿到好成绩!

原文地址:https://www.cnblogs.com/yczddgj/p/8695118.html

时间: 2024-08-26 14:47:28

【技巧】算法竞赛中对拍程序的写法的相关文章

算法竞赛中数论理论浅析

一.基本概念 带余除法(division algorithm,除法定理):a∈Z,d∈Z*,有唯一的整数 q 和 r,并且0≤r<d0,满足 a= d q+r.q 称为商,r  称为余数.通俗说法:整数除以正整数得到唯一的商(quotient)和余数(residue).  整除(divide exactly):称 a 整除 b ,当整数 a 除以非零整数 b ,商为整数,且余数为零, 我们就说a能被b整除(或说b能整除a),记作 b|a.b 称为 a 的约数(因数,common divisor)

算法竞赛中桶的概念与应用

算法竞赛中桶的概念与应用 在算法竞赛和计算机科学中,有一种特殊的数据结构,我们把它叫做--桶. 有许多和桶有关的算法和数据结构,想要学习它们,必须先明确好桶的概念与应用. 桶的概念 刚刚已经讲过,桶是一种数据结构.数据结构的用途是以一种特殊方式统计数据,使得我们能够快速地修改.查询我们想要的那部分数据.但是一般我们在想要统计一组数据的时候,我们更关注的是这些数据都是什么.就比如我们现在要统计一个数列,我们更关心的是这个数列里到底有那些数,而不是特别关心这些数都出现了几次. 桶就打破了这个现状,作

STL函数 lower_bound 和 upper_bound 在算法竞赛中的用法

以前比较排斥这两个函数,遇到二分都是手写 \(while(left<=right)\). 这次决定洗心革面记录一下这两个函数的在算法竞赛中的用法,毕竟一般不会导致TLE. 其实百度百科已经概述得比较清楚了, 我们假设 \(value\) 为一个给定的数值, \(lower\_bound\) 是在一个升序序列中从前后后找第一个大于等于 \(value\) 的值, \(upper\_bound\) 是在一个升序序列中从前后后找第一个大于 \(value\) 的值. 比如:\(lower\_bound

对拍程序的写法

对拍程序的写法 作为一名oier,考试不对拍,这跟直接见祖宗有什么区别 这里记录一下对拍程序的写法. 首先我们需要一个data.cpp程序,也就是数据生成器 int main() { srand(time(NULL)); for(R int i = 1; i <= 10; ++i) { ll x = (rand()<<15|rand()), y = (rand()<<15|rand()); cout<<x<<" "<<y

算法竞赛中常见的数学(一):Fibonacci数列

最近做的题目有很多都是与Fabonacci数列有关的,身为信息组蒟蒻的我最近经常与数学组李中一大神(Orz)畅谈,其中包括Fabonacci数列的若干性质,此处做一个总结. 参考资料: <组合数学(第5版)>.<具体数学(第2版)> 正文: Fibonacci数列是形如0.1.1.2.3.5.8.13.21.34……的数列.递归形式定义为: 数列F[n]=F[n-1]+F[n-2],其中F[0]=0,F[1]=1. 当然也有这样的类Fibonacci数列,即形如: G[n]=G[n

算法竞赛中的数论经典定理

素数定理:记为小于等于的素数个数,那么有 定理:设,,那么有 定理:设,,那么 定理:设,那么的值为 (1)为素数,那么答案就是 (2)有多个素因子,那么答案就是 (3)只有一个素因子,那么答案就是该素因子 定理:设为Fib数,那么有 定理:给定两个互素的正整数和,那么它们最大不能组合的数为,不能组合的数的个数为 定理:     (满足积性函数) 定理: 定理:任何个连续的正整数的乘积均可被整除 关于上述定理的两个结论 (1)如果是素数,那么均能被整除     证明:如果,那么有,由于与素数,那

《算法竞赛入门经典(第二版)》pdf

下载地址:网盘下载 内容简介  · · · · · · <算法竞赛入门经典(第2版)>是一本算法竞赛的入门与提高教材,把C/C++语言.算法和解题有机地结合在一起,淡化理论,注重学习方法和实践技巧.全书内容分为12 章,包括程序设计入门.循环结构程序设计.数组和字符串.函数和递归.C++与STL入门.数据结构基础.暴力求解法.高效算法设计.动态规划初步.数学概念与方法.图论模型与算法.高级专题等内容,覆盖了算法竞赛入门和提高所需的主要知识点,并含有大量例题和习题.书中的代码规范.简洁.易懂,不

[算法竞赛入门]第二章_循环结构程序设计

第2章 循环结构程序设计 [学习内容相关章节] 2.1for循环 2.2循环结构程序设计 2.3文件操作 2.4小结与习题 [学习目标] (1)掌握for循环的使用方法: (2)掌握while循环的使用方法: (3)学会使用计算器和累加器: (4)学会用输出中间结果的方法调试: (5)学会用计时函数测试程序效率: (6)学会用重定向的方式读写文件: (7)学会fopen的方式读写文件: (8)了解算法竞赛对文件读写方式和命名的严格性: (9)记住变量在赋值之前的值是不确定的: (10)学会使用条

算法竞赛入门 (一)语言篇 循环结构

掌握清单: for while do..while 循环 计数器和累加器 用输出中间结果的方法调试 用计时函数测试程序的效率 用重定向方式读写文件 用fopen方式读写文件 用条件编译指示构建本地运行环境 用编译选项 -Wall 获得更多的警告信息 一.for循环 程序1:for循环输出 #include<stdio.h> int main(){ int n; scanf("%d",&n); for(int i = 1;i <= n;i++) printf(&