转载自Hist!     http://hist.cnblogs.com/

介绍

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

举例

给定一个自然数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=0;scanf("%d",&n);for(int i=1;i<=n;i++) ans+=i;printf("%lld\n",ans);return 0;
}

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+1)*n/2);return 0;
}

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

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

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

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

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

Tips

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



mac os下编写对拍程序相关推荐

  1. cp linux 显示进度条_Unix/Linux/Mac os下 文件互传

    Unix/Linux/Mac os下 文件互传 说起文件互传,就不得不提命令scp. 他是Secure copy的缩写,使用ssh连接和加密方式, 如果两台机器之间配置了ssh免密登录, 那在使用sc ...

  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下如何刻录光盘

    今天早上同事让我帮他刻录光盘,第一次,然后研究了下,很简单,就分享给大家,希望不会的朋友可以有用. 对于一直使用windows系统而没有使用过mac os的用户来说,在mac os下刻录光盘完全无从下 ...

  4. Mac OS下的自带虚拟光驱

    找到Mac OS下的ISO双击你就可以把一个ISO挂载到你的文件系统. 这个Mac OS的本有功能真是强悍.不但可以挂载,甚至于还为你创建一个虚拟光驱的设备文件. 敲入mount命令就会看到你已经挂载 ...

  5. MAC OS下自动锁屏快捷键设置

    原文 http://flyshow.huoku.com/?p=178 一直想这样,但是找不到,今天搞定.转到这里吧,不是我的原创.这个不是锁定屏幕,是suspend. 用惯Windows的人都知道 & ...

  6. mac os下valgrind的安装

    valgrind是一款性能分析工具,功能强大. 在mac os下的安装略有不同,特写此文以记之. 现在最新的版本是3.8.1 tar jxvf valgrind-3.8.1.tar.bz2 cd va ...

  7. 在MAC OS 下配置python + Flask ,并支持pyCharm编辑器

    https://www.cnblogs.com/lgphp/p/3841098.html 在MAC OS 下配置python + Flask ,并支持pyCharm编辑器 flask是一个micro ...

  8. Mac OS下Tomcat native-APR的安装

    Mac OS下Tomcat native-APR的安装 1. 下载并编译APR 下载APR 在终端编译APR cd /<your_apr_dir>/aprCFLAGS='-arch x86 ...

  9. Mac OS 下的Vim使用系统剪切板

    [size=12]这里介绍的是Mac OS下终端Vim,Mac Vim并没有测试. [color=red] 下面的解决方法太麻烦了,直接装一个新的Vim直接搞定. macos的预装的终端Vim有个很麻 ...

最新文章

  1. 吴恩达机器学习笔记 —— 16 异常点检测
  2. 用 Flask 来写个轻博客 (4) — (M)VC_创建数据模型和表
  3. 开发日记-20190326
  4. Python的Tkinter点击按钮触发事件
  5. 怎样使用DBMS_OUTPUT.PUT_LINE?
  6. 校内集训(20170903)
  7. 使用response的outputstream
  8. How to use fb.data.query to get friends info?
  9. 工作68:子路由跳转
  10. Python调用(运行)外部程序参数问题
  11. opencv车牌分割_OpenVINO车牌识别网络详解
  12. 生产车间仿真软件flexSIM
  13. 在cmd中对Python的一些操作(查版本,下载包等)
  14. batchsize和数据量设置比例_设置BatchSize
  15. 开发谷歌浏览器插件会上瘾,搞了一个JSONViewer,一个页面格式化多条JSON,提升工作效率...
  16. 部分 VIII. A10 Networks
  17. 盘古石考核取证复现检材1(??)
  18. k8s-滚动更新与健康检查
  19. w ndows7太卡了,uefi安装win7卡在正在启动windows界面解决方法(新方法)
  20. 如何专业查看视频/音频/图片信息

热门文章

  1. 白皮书数据显示,内循环下差旅管控市场下沉趋势或将凸显
  2. mysql查询 正则表达式_Mysql正则表达式查询
  3. 刘东明老师中国邮政储蓄银行互联网金融网络营销培训
  4. 电脑连接不上wifi(不能显示可用网络)
  5. Python3爬虫常用技术总结
  6. C++之new动态分配内存生成数组
  7. 政府采购数据-含金额、采购方式、合同信息等(2003-2021年10月)
  8. 会话边界控制器(SBC)
  9. vue3.0 php,使用Vue3.0收获的知识点(一)
  10. 实验室作业之英文文本聚类