Mac OS下编写对拍程序
介绍
对拍是信息学竞赛中重要的技巧,它通过一个效率低下但正确率可以保证的程序,利用庞大的随机生成数据来验证我们的高级算法程序。对拍最大的优势在于可以通过人力所不能及的速度和数量达到验证的效果。下面我们来看一下简单的对拍程序该如何编写
举例
给定一个自然数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下编写对拍程序的更多相关文章
- mac os 下搭建android开发环境
mac os 下搭建android开发环境 周银辉 mac os 下搭建android环境比较方便, 如下几个步骤: 1,安装jdk 先搞清楚自己是否已经安装,在命令行下:java -version, ...
- Mac os 下的文件权限管理
Mac os 下的文件权限管理 命令 ls -l -A 结果 -rw-r--r-- 1 user admin 2326156 4 12 15:24 adb 横线代表空许可.r代表只读,w代表写,x代表 ...
- mac os 下的sublime --- 快捷键
mac os 下的sublime ---列模式 http://www.oschina.net/question/249672_161413 触控板也可以的:左手同时按住 Option 和触控板左下角 ...
- MAC OS下免费下载YouTube
YouTube上有很多不错的视频,你感兴趣的视频除了可以加入自己播放列表之外,还可以将其下载到本地收藏起来.推荐这款软件“Xilisoft Download YouTube Video for Mac ...
- YII 框架在 MAC OS下 连接数据库失败 提示 DB connection: SQLSTATE[HY000] [2002]
作者:zccst CDbConnection failed to open the DB connection: SQLSTATE[HY000] [2002] No such file or dire ...
- wget Mac OS 下安装
wget是一个从网络上自动下载文件的自由工具,支持通过HTTP.HTTPS.FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理. 下面介绍如何在Mac OS 下安装Wget 下载最新版的 ...
- [转]Linux/Windows下脚本对拍程序
[新]简单写法 (转载自:https://blog.csdn.net/ylsoi/article/details/79824655) 要求:文件输入输出,且输入输出文件需要对应 Linux: #inc ...
- Mac OS下 Redis2.6.14部署记录
Mac OS下 Redis2.6.14部署记录 部署一个Redis作为缓存进行验证,记录部署过程. 官网:http://redis.io/,目前最近稳定版为2.6.14 解压,进入目录.按照READ ...
- Mac os 下 python爬虫相关的库和软件的安装
由于最近正在放暑假,所以就自己开始学习python中有关爬虫的技术,因为发现其中需要安装许多库与软件所以就在这里记录一下以避免大家在安装时遇到一些不必要的坑. 一. 相关软件的安装: 1. h ...
随机推荐
- TP第一天路由解析
路由解析:支持四种URL模式,分别是普通模式.路径模式.重写模式.兼容模式,分别用0123表示 普通模式:http://网址/index.php?m=model&c=user&a=lo ...
- 四、Protocol 类似java的接口
概念:是一系列方法的列表,其中声明的方法可以被任意类实现.这种模式称为代理.和JAVA接口不同的是,Protocol可以不用被实现所有的方法. 使用场景:想要监听一些按钮的操作 1声明一个协议 //& ...
- SOS.dll (SOS Debugging Extension)
SOS.dll (SOS Debugging Extension) lays threads associated with a live thread. The -special option di ...
- C++ List的用法(整理)
转自http://blog.csdn.net/lskyne/article/details/10418823 Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和 ...
- Log4net Dll用法
在导入Log4net的过程中,遇到一两个小bug. 开发平台必须是NET4 而不能是net4 client profile Log4Helper 里面的Namespace要和我们建立项目的名称一致. ...
- iOS 定位精度
时间 2015-03-19 18:30:59 图灵社区 由于iOS不能直接控制到GPS,一般来说我们都会使用CLLocationManager来获取地理位置信息,我们会使用 manager.des ...
- Android Studio 2.2 来啦
今年的 I/O 2016 Google 放出了 Android Studio 2.2 的预览版,改进了多项功能,只不过为了保证公司项目不受影响,我一般都不安装预览版的,因为预览版意味着不稳定,可能遇到 ...
- Linux 基础入门 第一周9.14~9.20
第一节 Linux系统简介 Linux——操作系统 1.使多个用户从不同的终端同时操作主机(分时操作系统): 2.MINIX是一个功能有限的类似于UNIX的操作系统(UNIX 实现了 TCP/IP 协 ...
- Object C学习笔记16-委托(delegate)
在.NET中都知道委托(delegate),通俗点的解释就是可以将方法作为一个参数传到另外一个方法中使用. 委托是一种引用方法的类型.一旦为委托分配了方法,委托将与该方法具有完全相同的行为.委托方法的 ...
- js事件代理
需要注意的blog:http://blog.csdn.net/majian_1987/article/details/8591385 一篇博客看懂 http://blog.csdn.net/maji ...