Linux下程序对拍_C++ (付费编号1001)
一、对拍背景
对拍是一种十分实用的检查程序正确性的手段,在比赛时广泛使用
我们一般对拍两个程序,一个是自己不确定正确性的高级算法,另一个一般是能保证正正确的暴力算法
我们采用随机产生数据,然后分别用这两个程序读入数据,最后比较两程序答案的异同来进行验证
二、程序准备
首先我们准备两个程序
一般一个是认为正确或较高部分分的解法,另一个是低分的暴力解法
我们以a+b为例,一个用 C 输入,一个用 C++ 输入
程序一:
1 #include<iostream>
2 #include<cstdio>
3 using namespace std;
4
5 int main()
6 {
7 freopen("ab.in","r",stdin);
8 freopen("ab1.out","w",stdout);
9 int a,b;
10 cin>>a>>b;
11 cout<<a+b<<endl;
12 return 0;
13 }
程序二:
1 #include<cstdio>
2 using namespace std;
3
4 int main()
5 {
6 int a,b;
7 freopen("ab.in","r",stdin);
8 freopen("ab2.out","w",stdout);
9 scanf("%d%d",&a,&b);
10 printf("%d\n",a+b);
11 return 0;
12 }
三、制作数据产生程序
我们采用 C++ 来制作随机数据
将数据输出到程序的输入文件里
重置随机种子 srand(time(NULL));
使用 rand() 函数生成随机数,后面的取模为数据范围
如 x=rand()%100; 产生一个 0~99 的整数放入变量 x
具体数据生成根据题目具体而定
这里给出A+B的数据制作程序:
1 #include<cstdio>
2 #include<cstdlib>
3 #include<ctime>
4 using namespace std;
5
6 int main()
7 {
8 freopen("ab.in","w",stdout);
9 int x,y;
10 srand(time(NULL));
11 x=rand()%1000000;
12 y=rand()%1000000;
13 printf("%d %d\n",x,y);
14 return 0;
15 }
四、对拍程序
我们仍采用 C++ 程序来进行对拍,具体用 system 函数实现
system("./***"); 运行程序,其中***代表可执行文件名
system("diff *** ***"); 比较两个文件,我们在对拍时比较两个不同程序的输出文件
若两个文件内容不相同则返回 真true ,相同则返回 假false ,这与C++中逻辑是相反的
1 #include<cstdio>
2 #include<cstdlib>
3 using namespace std;
4
5 int main()
6 {
7 int i;
8 for (i=1;i<=1000;i++)
9 {
10 system("./make");
11 system("./ab1");
12 system("./ab2");
13 printf("%d : ",i);
14 if (system("diff ab1.out ab2.out"))
15 {
16 printf("WA\n");
17 return 0;
18 }
19 else printf("AC\n");
20 }
21 return 0;
22 }
版权所有,转载请联系作者,违者必究
联系方式:http://www.cnblogs.com/hadilo/p/5932395.html
Linux下程序对拍_C++ (付费编号1001)的更多相关文章
- Linux下程序对拍_C++
此博客需要付费才阅读,因为该博客实用性十分强,且十分容易理解 若需购买请联系博主,联系方式戳这 http://www.cnblogs.com/hadilo/p/5932395.html 主要介绍如何在 ...
- Linux下程序的机器级表示学习心得
Linux下程序的机器级表示学习心得 上周学习完Linux程序的机器级表示后,对于其中有些还是掌握的不太透彻.对于老师提出的关于本章一些细节的问题还是有不会,所以又重新温习了一下上周的学习内容,以下为 ...
- windows和linux下如何对拍
对拍是各种计算机考试检查时必备工具,实际上十分强大,只要你的暴力没有写错就没有问题. 对拍的意思:(怎么有点语文课的意思雾) 对:看见'对'就可以知道有两个. 拍:就是把两个程序结果拍在一起,对照(有 ...
- 制作Linux下程序安装包——使用脚本打包bin、run等安装包
制作简单的安装包的时候可以简单的用cat命令连接两个文件,然后头部是脚本文件,执行的时候把下面的文件分解出来就行了.一般这个后部分的文件是个压缩 包,那样,就能够打包很多文件了,在脚本中解压出来即可. ...
- Linux下程序崩溃,ulimit,coredump,gdbserver
操作系统:Ubuntu10.04 前言: 在程序崩溃后,如何快速定位问题. 以下方法适用于开发调试阶段,不太适用成品. 本文着眼于嵌入式,PC方面更简单. 核心:gdbserv ...
- [转] Linux下程序的加载、运行和终止流程
TAG: linux, main, _start DATE: 2013-08-08 原文地址: http://blog.csdn.net/tigerscorpio/article/details/62 ...
- linux下程序JDBC连接不到mysql数据库
今天在linux下部署一个 JavaEE项目的时候总是连接不到Mysql数据库,检查之后发现连接池的配置确定是对的,进入linux服务器之后以mysql -uname -ppassword连接总是报A ...
- Linux下程序下载
每个开发板/PC机都有硬盘(ROM,read only memory,只读存储器)和运行内存(RAM,random access memory,随机存取存储器).其中Nand/Nor flash相当于 ...
- linux下程序启动后后台运行实现
关于linux下的程序运行很简单,将源码编译成二进制(假设为proram)文件后直接在命令行运行即可,root#./program如果需要后台运行,即不占用当前终端,这在嵌入式linux显得十分有必要 ...
随机推荐
- leetcode 笔记5 single number
question: Given an array of integers, every element appears twice except for one. Find that single o ...
- eclipse 列编辑
ALT + SHIFT +A 进入列编辑模式,可以一次性操作多行列. 再次按住 ALT + SHIFT +A 则退出列编辑模式.
- join ,left join ,right join有什么区别
join等价于inner join内连接,是返回两个表中都有的符合条件的行. left join左连接,是返回左表中所有的行及右表中符合条件的行.(左表为主表) right join右连接,是返回右表 ...
- LR创建数据源读取excel
1 在window上创建数据源 2 创建对应的数据文件 excel 注:注意格式和底部的表单名称 3 Vegen中创建参数 注意:机器数据源选择windows的ODBC数据源 SQL查的是(she ...
- Selenium Grid 环境搭建 碰到的unable to access server
1. Slenenium Grid的环境部署, 前提条件: JDK,JRE都已经安装, selenium的standalone jar包放在磁盘 执行如下命令,报错: 2. 在cmd窗口里切换到jar ...
- C++ 学习笔记之——文件操作和文件流
1. 文件的概念 对于用户来说,常用到的文件有两大类:程序文件和数据文件.而根据文件中数据的组织方式,则可以将文件分为 ASCII 文件和二进制文件. ASCII 文件,又称字符文件或者文本文件,它的 ...
- rcnn caffe matlab 配置完成 14.04 cuda 7.0
http://blog.csdn.net/real_myth/article/details/42672381 各种痛苦.实验室网速还是龟速. 莫名其妙的错误. gcc还降级到4.7,opencv 3 ...
- lintcode-51-上一个排列
51-上一个排列 给定一个整数数组来表示排列,找出其上一个排列. 注意事项 排列中可能包含重复的整数 样例 给出排列[1,3,2,3],其上一个排列是[1,2,3,3] 给出排列[1,2,3,4],其 ...
- C++编码规范101
组织和策略问题 第0条 不要拘泥于小节(又名:了解哪些东西不应该标准化) 第1条 在高警告级别干净利落地进行编译 第2条 使用自动构建系统 第3条 使用版本控制系统 第4条 在代码审查上投入 设计风格 ...
- 自定义 Relam
package org.zln.hello.realm; import org.apache.shiro.authc.*; import org.apache.shiro.realm.Realm; / ...