Ubuntu环境下对拍
何为对拍
假设我在考场上写了一个能过样例的算法。然后它也能过大样例但是我觉得有些担心某些细节会出错,或者是它连大样例都过不了但是大样例过大无法肉眼差错,这个时候我们就需要对拍了。
所谓对拍,就是对着拍数据。写一个保证正确性的暴力的程序,写一个随机造数据的程序,写一个批量处理文件,让暴力程序、造数据程序以及自己的程序不断执行以下步骤:
造输入数据,用暴力生成正确的输出数据,运行自己的程序判断结果是否正确。如果不正确就停下来。
这样不断重复的进行的话,如果我们的程序某些地方写错了有很大几率可以查出来。并且我们可以把对拍造的数据造小一点,这样也方便肉眼查错。
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环境下对拍的更多相关文章
- Linux(Ubuntu)环境下使用Fiddler
自己的开发环境是Ubuntu, 对于很多优秀的软件但是又没有Linux版本这件事,还是有点遗憾的.比如最近遇到一个问题,在分析某个网站的请求路径和cookie时就遇到了问题.本来Chome浏览器自带的 ...
- Go学习笔记(一):Ubuntu 环境下Go的安装
本文是根据<Go Web 编程>,逐步学习 Ubuntu 环境下go的安装的笔记. <Go Web 编程>的URL地址如下: https://github.com/astaxi ...
- Ubuntu环境下SSH的安装及使用
Ubuntu环境下SSH的安装及使用 SSH是指Secure Shell,是一种安全的传输协议,Ubuntu客户端可以通过SSH访问远程服务器 .SSH的简介和工作机制可参看上篇文章SSH简介及工作机 ...
- Ubuntu环境下的Redis 配置与C++使用入门
Redis是一个高性能的key-value数据库. Redisedis的出现,非常大程度补偿了memcached这类key/value存储的不足,在部分场合能够对关系数据库起到非常好的补充作用.它 ...
- ubuntu环境下docker安装步骤
本文是根据docker官方文档翻译,原文:https://docs.docker.com/engine/installation/linux/ubuntulinux/ Docker 支持以下 Ubun ...
- ubuntu 环境下的QT程序打包
很多的时候 需要将自己写的QT 程序发布一下 所以今天教一下 怎么在ubuntu 环境下将自己的写的Qt 程序打包打包是为了不依赖 开发环境 和开发的库. 1. QtCreate使用Release版 ...
- ubuntu环境下eclipse的安装以及hadoop插件的配置
ubuntu环境下eclipse的安装以及hadoop插件的配置 一.eclipse的安装 在ubuntu桌面模式下,点击任务栏中的ubuntu软件中心,在搜索栏搜索eclipse 注意:安装过程需要 ...
- Ubuntu环境下No module named '_tkinter'错误的解决
在Ubuntu环境下运行下面代码: import matplotlib as plt 出现以下错误: No module named '_tkinter' 解决方法: sudo apt-get ins ...
- Ubuntu环境下配置GCC
Ubuntu网络环境下安装GCC及其头文件步骤: 1.Ubuntu环境下配置GCC 刚装好的GCC什么都不能编译,因为没有一些必须的头文件,所以要安装build-essential,安装了这个包会安装 ...
随机推荐
- Linux U盘只读解决方法
Linux Fat的U盘只读,这个问题经常出现,原因大家都说了是U盘的错误,出现这种情况后,一般的解决方案是 mount | grep <U盘的标签> # 找到你的U盘的对应的设备名称,如 ...
- cacti 安装和组件添加
安装cacti 步骤 1.准备lamp环境 2.准备所需包:rrdtool(绘图) cacti(安装程序) net-snmpd(数据收集) 3.安装所需库文件 rrdtool所需库文件有: cairo ...
- 【转载】【selenium+Python WebDriver】之元素定位
总结: 感谢: “煜妃”<Selenuim+Python之元素定位总结及实例说明> “Huilaojia123”<selenium WebDriver定位元素学习总结> “上海 ...
- VMware 报错“Intel VT-x处于禁止状态”
VMware Workstation 10虚拟机安装64位windows server 2008 R2系统时报错“Intel VT-x处于禁止状态”,如下图. 工具/原料 VMware Wor ...
- 一个中断服务子程序ISR
请看下面的程序(一个中断服务子程序ISR),请指出这段代码的错误.)[中国台湾某著名CPU生产公司2005年面试题] 答案:(1)ISR不能返回一个值.如果你不懂这个,那么是不会被雇用的.(2)ISR ...
- IOS开发之----异常处理
本文转载至 http://blog.csdn.net/chenyong05314/article/details/7906593 转载自:http://blog.sina.com.cn/s/blog_ ...
- 淘宝(新浪)API获取IP地址位置信息
package com.parse; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IO ...
- 九度OJ 1166:迭代求立方根 (迭代)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3695 解决:1700 题目描述: 立方根的逼近迭代方程是 y(n+1) = y(n)*2/3 + x/(3*y(n)*y(n)),其中y0 ...
- 关于gcc
1 the architecture of gcc 2 自己编译gcc时的 --build --host --target选项的含义和用法 <1> --build 执行本次的gcc编译的主 ...
- cookie和session的原理机制
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...