何为对拍

假设我在考场上写了一个能过样例的算法。然后它也能过大样例但是我觉得有些担心某些细节会出错,或者是它连大样例都过不了但是大样例过大无法肉眼差错,这个时候我们就需要对拍了。

所谓对拍,就是对着拍数据。写一个保证正确性的暴力的程序,写一个随机造数据的程序,写一个批量处理文件,让暴力程序、造数据程序以及自己的程序不断执行以下步骤:

造输入数据,用暴力生成正确的输出数据,运行自己的程序判断结果是否正确。如果不正确就停下来。

这样不断重复的进行的话,如果我们的程序某些地方写错了有很大几率可以查出来。并且我们可以把对拍造的数据造小一点,这样也方便肉眼查错。

Ubuntu对拍方式

假设我们已经写好了data.cpp用于制造输入数据,brute_force.cpp用于制造输出数据这两个东西写挂了可以去自闭了,以及自己的程序a.cpp。

首先新建一个check.sh文件,在里面输入如下内容:

//双斜线后面为注解,不是check.sh的内容
#!/bin/bash //假装这是个头文件(我也不知道啥意思
g++ a.cpp -o a -Wall
g++ data.cpp -o data -Wall
g++ brute_force.cpp -o brute_force -Wall //编译你的三个代码
while true;do //一直做,直到拍出错误
./data>data.in
./a<data.in>a.out
./brute_force<data.in>brute.out //造输入输出,然后用你自己的程序再去造一组输出
if diff -b -B -q test.out std.out;then //diff -b -B -q后解俩文件是比较这俩文件的意思,-b -B -q是忽略制表符行末空格以及空行的影响。如果没差别则会返回逻辑真
echo "Wonderful!" //没差别输出Wonderful!
else
echo "Fake!Wrong Answer!"
break //有差别输出WA,并且跳出循环
fi //if的终止标志
done //while的终止标志

造好check.sh后,在终端输入chmod 777 check.sh(相当于取得使用权限)然后就可以输入./check.sh来愉快的对拍了。

另外,在终端输入time a<data.in>data.out可以查看你的程序跑了多少时间。

Ubuntu环境下对拍的更多相关文章

  1. Linux(Ubuntu)环境下使用Fiddler

    自己的开发环境是Ubuntu, 对于很多优秀的软件但是又没有Linux版本这件事,还是有点遗憾的.比如最近遇到一个问题,在分析某个网站的请求路径和cookie时就遇到了问题.本来Chome浏览器自带的 ...

  2. Go学习笔记(一):Ubuntu 环境下Go的安装

    本文是根据<Go Web 编程>,逐步学习 Ubuntu 环境下go的安装的笔记. <Go Web 编程>的URL地址如下: https://github.com/astaxi ...

  3. Ubuntu环境下SSH的安装及使用

    Ubuntu环境下SSH的安装及使用 SSH是指Secure Shell,是一种安全的传输协议,Ubuntu客户端可以通过SSH访问远程服务器 .SSH的简介和工作机制可参看上篇文章SSH简介及工作机 ...

  4. Ubuntu环境下的Redis 配置与C++使用入门

      Redis是一个高性能的key-value数据库. Redisedis的出现,非常大程度补偿了memcached这类key/value存储的不足,在部分场合能够对关系数据库起到非常好的补充作用.它 ...

  5. ubuntu环境下docker安装步骤

    本文是根据docker官方文档翻译,原文:https://docs.docker.com/engine/installation/linux/ubuntulinux/ Docker 支持以下 Ubun ...

  6. ubuntu 环境下的QT程序打包

    很多的时候 需要将自己写的QT 程序发布一下  所以今天教一下 怎么在ubuntu 环境下将自己的写的Qt 程序打包打包是为了不依赖 开发环境 和开发的库. 1. QtCreate使用Release版 ...

  7. ubuntu环境下eclipse的安装以及hadoop插件的配置

    ubuntu环境下eclipse的安装以及hadoop插件的配置 一.eclipse的安装 在ubuntu桌面模式下,点击任务栏中的ubuntu软件中心,在搜索栏搜索eclipse 注意:安装过程需要 ...

  8. Ubuntu环境下No module named '_tkinter'错误的解决

    在Ubuntu环境下运行下面代码: import matplotlib as plt 出现以下错误: No module named '_tkinter' 解决方法: sudo apt-get ins ...

  9. Ubuntu环境下配置GCC

    Ubuntu网络环境下安装GCC及其头文件步骤: 1.Ubuntu环境下配置GCC 刚装好的GCC什么都不能编译,因为没有一些必须的头文件,所以要安装build-essential,安装了这个包会安装 ...

随机推荐

  1. python爬虫,从hao123爬取网址信息

    最近研究python的爬虫,小小程序,拿下来分享,本人使用python3.7,纯粹兴趣爱好,希望能帮助大家激发兴趣.从hao123,爬取各种网址信息,代码如下. import urllib.reque ...

  2. 简单的js表单验证框架

    /** * 通常在我们的HTML页面表单中有大量的数据验证工作, * 免不了要写很多验证表单的js代码,这是一项非常繁琐 * 枯燥的工作.很多程序员也会经常遗漏这项工作.当然 * 一些JavaEE框架 ...

  3. Android Calendar的学习与运用

    [java]mport java.text.DateFormat; import java.text.ParsePosition; import java.text.SimpleDateFormat; ...

  4. 数据挖掘、目标检测中的cnn和cn---卷积网络和卷积神经网络

    content 概述 文字识别系统LeNet-5 简化的LeNet-5系统 卷积神经网络的实现问题 深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功.本人在多年之前也曾接触过神经网络.本系 ...

  5. 目标检测之人头检测(HaarLike Adaboost)---高密度环境下行人检测和统计

    实验程序视频 下载 1 问题描述 高密度环境下的行人统计一直没有得到很好的解决,主要原因是对高密度人群中的行人检测和跟踪是一个很难的问题,如下图所示环境,存在的困难包括: 检测方面: 由于人群整体处于 ...

  6. ASP.NET动态网站制作(6)-- JS(1)

    前言:JS的第一节课,在Visual Studio 2013中编写及运行.新建项目->Web->ASP.NET Web应用程序->Empty,打开后在项目下添加新建css文件夹和js ...

  7. MongoDB学习笔记&lt;六&gt;

    继续mongoDB的学习 --索引具体解释 --索引管理 --空间索引 1.创建简单索引 (1)先准备20万条数据 for(var i = 0;i< 200000;i++){ db.books. ...

  8. mongodb 集群部署--分片服务器搭建

    部署分片服务器 1.分片 为了突破单点数据库服务器的I/O能力限制,对数据库存储进行水平扩展,严格地说,每一个服务器或者实例或者复制集就是一个分片. 2.优势 提供类似现行增·长架构 提高数据可用性 ...

  9. EasyPlayerPro RTMP播放器助力远程娃娃机直播抓娃娃技术方案

    远程娃娃机 目前市面上娃娃机的方案有很多种.核心的技术流程就是实现远程直播加上对娃娃机手臂的远程操作.其中最主要的技术还是视频直播方案,需要低延时,视频秒开等流媒体技术. 最简单的直播方案 视频直播方 ...

  10. Ruby 文件 FILE

    FileUtils.makedirs(LOCAL_DIR) unless File.exists?LOCAL_DIR require 'fileutils' Dir.mkdir(DATA_DIR) u ...