介绍

  对拍是信息学竞赛中重要的技巧,它通过一个效率低下但正确率可以保证的程序,利用庞大的随机生成数据来验证我们的高级算法程序。对拍最大的优势在于可以通过人力所不能及的速度和数量达到验证的效果。下面我们来看一下简单的对拍程序该如何编写

举例

给定一个自然数n (n<=50000),求解1+2+3+...+n的和。

test1.cpp //算法程序1

test2.cpp //算法程序2

data.cpp //数据生成器

compare.cpp //比较程序

说明

test1.cpp和test2.cpp都是我们所写的算法程序,其中test1.cpp使用朴素的for循环求解,代码如下:

 #include<cstdio>

 int main()
{
freopen("test.in" ,"r",stdin);
freopen("test1.out","w",stdout); int n;
long long ans=;
scanf("%d",&n);
for(int i=;i<=n;i++) ans+=i;
printf("%lld\n",ans); return ;
}

test1.cpp

test2.cpp利用公式计算,代码如下:

 #include<cstdio>

 int main()
{
freopen("test.in" ,"r",stdin);
freopen("test2.out","w",stdout); int n;
scanf("%d",&n);
//printf("%lld\n",(long long) (n+1)*n/2);
printf("%d\n",(n+)*n/);
return ;
}

test2.cpp

data.cpp是我们写的数据生成器

 #include<cstdio>
#include<ctime>
#include<cstdlib>
using namespace std; int main()
{
freopen("test.in","w",stdout);
srand(time());
printf("%d",abs(rand()*rand()%));
return ;
}

data.cpp

而compare.cpp则是对拍程序的主体

 #include<cstdio>
#include<cstdlib> int main()
{
int tmp=;
for(int i=;i<=;i++)
{
system("./data");
system("./test1");
system("./test2"); if(i/>tmp) {printf("-- %d --\n",i);tmp=i/;}
if(system("diff test1.out test2.out"))
{
printf("wrong in --> %d \n",i);
break;
}
}
return ;
}

compare.cpp

将四个文件编译后的可执行文件放到一个文件夹里,用cd进入这个文件夹,输入

 ./compare

即可运行。

Tips

1.“./”表示当前目录下,如果在终端中输入的是./compare 的话就已经默认在当前目录里了,程序里不写“./”也是可行的。
2.diff函数在得到不同的比较值时会返回“1”。
3.mac os下对比是没有提示的,知道有不同的结果出现时才有所提示。所以建议自己写的时候附带提示功能。

Mac OS下编写对拍程序的更多相关文章

  1. mac os 下搭建android开发环境

    mac os 下搭建android开发环境 周银辉 mac os 下搭建android环境比较方便, 如下几个步骤: 1,安装jdk 先搞清楚自己是否已经安装,在命令行下:java -version, ...

  2. Mac os 下的文件权限管理

    Mac os 下的文件权限管理 命令 ls -l -A 结果 -rw-r--r-- 1 user admin 2326156 4 12 15:24 adb 横线代表空许可.r代表只读,w代表写,x代表 ...

  3. mac os 下的sublime --- 快捷键

    mac os 下的sublime ---列模式 http://www.oschina.net/question/249672_161413 触控板也可以的:左手同时按住 Option 和触控板左下角 ...

  4. MAC OS下免费下载YouTube

    YouTube上有很多不错的视频,你感兴趣的视频除了可以加入自己播放列表之外,还可以将其下载到本地收藏起来.推荐这款软件“Xilisoft Download YouTube Video for Mac ...

  5. YII 框架在 MAC OS下 连接数据库失败 提示 DB connection: SQLSTATE[HY000] [2002]

    作者:zccst CDbConnection failed to open the DB connection: SQLSTATE[HY000] [2002] No such file or dire ...

  6. wget Mac OS 下安装

    wget是一个从网络上自动下载文件的自由工具,支持通过HTTP.HTTPS.FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理. 下面介绍如何在Mac OS 下安装Wget 下载最新版的 ...

  7. [转]Linux/Windows下脚本对拍程序

    [新]简单写法 (转载自:https://blog.csdn.net/ylsoi/article/details/79824655) 要求:文件输入输出,且输入输出文件需要对应 Linux: #inc ...

  8. Mac OS下 Redis2.6.14部署记录

    Mac OS下 Redis2.6.14部署记录 部署一个Redis作为缓存进行验证,记录部署过程. 官网:http://redis.io/,目前最近稳定版为2.6.14  解压,进入目录.按照READ ...

  9. Mac os 下 python爬虫相关的库和软件的安装

      由于最近正在放暑假,所以就自己开始学习python中有关爬虫的技术,因为发现其中需要安装许多库与软件所以就在这里记录一下以避免大家在安装时遇到一些不必要的坑. 一. 相关软件的安装:   1. h ...

随机推荐

  1. parse_url等函数

    $_SERVER["REQUEST_URI"]://这个可以获取域名后的url,比如/test1/parse_url.php?id=7&name=wuhan 常见用法$ur ...

  2. isAnimated函数

    function isAnimated($obj){ var flag=false; if($obj.is(":animated")){ flag=true; } return f ...

  3. 20SpringMvc_结果的转发可共享参数;重定向不能共享参数

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 /* Style Definiti ...

  4. svn命令行修改已提交的版本备注

    svn命令行修改已提交的版本备注 参考文章: stackoverflow.com/questions/304383/how-do-i-edit-a-log-message-that-i-already ...

  5. Django基础 - Debug设置为False后静态文件获取404

    当设置setting.py文件当中的DEBUG=FALSE后,Django会默认使用Web Server的静态文件处理,故若没设置好Web Server对静态文件的处理的话,会出现访问静态文件404的 ...

  6. PHP基础12:数组

    <?php //1.实例 $array = array("VOLVO","BMW","SASS"); for ($i=0; $i &l ...

  7. jQuery使用ajax跨域获取数据

    var webMethod = "http://localhost:54473/Service1.asmx/HelloWorld";  jQuery.support.cors = ...

  8. MVC4 WebAPI

    不管是因为什么原因,结果是在新出的MVC中,增加了WebAPI,用于提供REST风格的WebService,个人比较喜欢REST风格的WebService,感觉比SOAP要轻量级一些,而且对客户端的要 ...

  9. MVC中利用自定义的ModelBinder过滤关键字

    上一篇主要讲解了如何利用ActionFilter过滤关键字,这篇主要讲解如何利用自己打造的ModelBinder来过滤关键字. 首先,我们还是利用上一篇中的实体类,但是我们需要加上DataType特性 ...

  10. 【OpenGL】查看显卡对OpenGL的支持程度

    由于开发工作中要用到OpenGL的API进行渲染,公司配的电脑又是集成显卡,所以想知道显卡对OpenGL的支持程度. 下面介绍的方法就解决了这一点. 1.下载安装EVEREST Ultimate Ed ...