ACM程序对拍
有时候在OJ刷题目的时候,总是会遇到不知名bug,题目总不能AC,自己测试的一些数据又都能得出正确的结果,又或是直接暴力会TLE,改了算法,但是仍然WA,这时候进行程序对拍测试数据不失为一个好办法。程序对拍主要是通过数据生成器生成随机数据,然后与正确程序跑出来的结果进行比对,虽然有时候数据很难构造,但是对于一般的题目却能起到很到的作用。
通过一个简单的例子进行解释:求两个数之和。
两个进行对拍的程序
#include<stdio.h> int main() { freopen("data.txt","r",stdin); //从文件读入数据 freopen("1.txt","w",stdout); //写出数据到文件 int a,b; while (~scanf("%d%d",&a,&b)) { printf("%d+%d=%d\n",a,b,a+b); } return 0; } #include<stdio.h> int main() { freopen("data.txt","r",stdin); //从文件读入数据 freopen("1.txt","w",stdout); //写出数据到文件 int a,b; while (~scanf("%d%d",&a,&b)) { printf("%d+%d=%d",a,a,a+a); } return 0; }
数据生成器程序
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<limits.h> int main() { freopen("data.txt","w",stdout); //随机数据生成写入到此文件 srand(time(NULL)); int n = 100; //数据规模 while (n--) { printf("%d %d\n",rand()%INT_MAX,rand()%INT_MAX); } return 0; }
重要的一步:在保存数据的位置新建一个txt文本文件,输入如下内容,并把“.txt”的后缀名改为“.bat”,双击运行即可。
@echo off fc 1.txt 2.txt pause
二者结果若无差异,显示为
若有差异,显示为
几种常用的数据生成程序:
//生成int型数据 #include<cstdio> #include<cstdlib> #include<cstring> #include<time.h> int main() { freopen("data.txt", "w", stdout); srand(time(NULL)); //通过控制t的大小控制产生数的范围,控制n可以控制数据的产生量。 int t, n = 1000; while(n--) { printf("%d\n",rand()%t); } return 0; } //生成两位小数数据 #include<cstdio> #include<cstdlib> #include<cstring> #include<time.h> int main() { freopen("data.txt", "w", stdout); srand(time(NULL)); int n = 1000; while(n--) { printf("%.2lf\n",rand()*1.0/100); } return 0; } //生成字符串 #include<cstdio> #include<cstdlib> #include<cstring> #include<time.h> int main() { freopen("data.txt", "w", stdout); srand(time(NULL)); int t, n = 1000; while(n--) { printf("%c\n",rand()%26 + 'A'); } return 0; }
最后再通过一个例子加深对数据生成器的理解,假设有一组输入数据如下:
- IN x(0=<x<1000000000)表示队伍最后面新来了一个饥饿值为 x 的同学
- OUT 表示队伍最前面的同学打饭结束离开队伍(若无人则跳过该操作)
- QUERY
- END 表示输入结束
数据生成器可写成如下:
#include<cstdio> #include<cstdlib> #include<cstring> #include<time.h> const int maxn = 1000000000; int main() { freopen("data.txt", "w", stdout); srand(time(NULL)); //通过控制t的大小控制产生数的范围,控制n可以控制数据的产生量。 int t = 3,n = 7000; while (n--) { if (rand()%t+1 == 1) { printf("IN %d\n",rand()%maxn); } else if (rand()%t + 2 == 2) { printf("OUT\n"); } else if (rand()%t + 3 == 3) { printf("QUERY\n"); } } printf("END"); return 0; }
ACM程序对拍的更多相关文章
- 多个程序对sql server中的表进行查询和插入操作导致死锁
最近在做一个项目,是要用多个程序对sql server中的相同的数据库进行操作(查询和插入),所以在开始的时候常会出现死锁问题,后来在网上进行了咨询,发现了一些解决方法,留作大家参考: 并发去操纵一张 ...
- JAVA程序对MYSQL数据库加锁实验
什么是脏读,不可重复读,幻读 1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据. 2. 不可重 ...
- ACM数据对拍程序
#include<cstdio> #include<cstdlib> #include<ctime> int main() { long s,t; while(1) ...
- 结合自己的程序对thinkphp模板常量的理解
先上个图,有时候路径很多,没理解会搞混,看手册的说明 页面login.html模板的访问路径为http://www.tp.com/index.php/admin/Manager/login,测试他的常 ...
- 编写一个程序对Largest函数进行测试,找出一组数据的最大值
源程序代码: import java.util.Scanner; public class findmax { public static void main(String[] args) { // ...
- 用程序对hdfs进行操作。
调试加安装了半天,怎么也没有配置好怎么通过Eclipse直接连接hdfs,最后我还是打成一个jar包放到Linux虚拟机中运行的. 运行命令Java -jar XXX.jar. 当中对hdfs的操作 ...
- 使用java程序对oracle添加触发器时,报错:索引中丢失 IN 或 OUT 参数:: 1
解决方法: 执行sql语句时,使用java.sql.Statement代替java.sql.PreparedStatement. java.sql.PreparedStatement ps = con ...
- 201671010127 2016—2017-2 通过一个小程序对Java的再认识。
学习了将近四周的Java语言,对于Java语言,我也有了更进一步的理解,出于对Java语言的喜爱,我总是喜欢没事的时候,自己敲一些很简单的代码,一边学习Java语言,一边对比C语言,往往可以帮助我们更 ...
- Linux网卡驱动程序对ethtool的支持和实现
Linux 的一个显著特点就是其强大的网络功能,Linux 几乎支持所有的网络协议,并在这些协议基础上提供了丰富的应用.对 Linux 网络管理的重要性不言而喻,这些管理依赖于网络工具,比如最常用的 ...
随机推荐
- Windows 部署 Redis 群集
1,下载Redis for windows 的最新版本,解压到 c:\Redis 目录下备用https://github.com/MSOpenTech/redis/releases当前我使用的是 3. ...
- 打磨程序员的专属利器——命令行&界面
工欲善其事,必先利其器,程序员更是如此,如果没有一套与自己思维同步的工具,将非常难受并且编码效率会非常低. 但十个程序员就有对工具的十种不同理解,本人现在冒然将自己的“工具箱”拿出来晒晒.若对大家没帮 ...
- 多线程处理中Future的妙用
java 中Future是一个未来对象,里面保存这线程处理结果,它像一个提货凭证,拿着它你可以随时去提取结果.在两种情况下,离开Future几乎很难办.一种情况是拆分订单,比如你的应用收到一个批量订单 ...
- 如何采集QQ群中所有成员QQ号码
安装Google Chrome浏览器 安装Google插件:Regex Scraper 在群成员页面点击Regex 插件, 粘贴上这个代码 text_overflow">([\S\s] ...
- VS2013 无法在Web服务器上启动调试。IIS未列出与打开的URL匹配的网站。
出现这个问题的原因是:没有用管理员权限运行VS2013. 本来遇到这个问题的时候,不知道什么原因.后来附加到进程调试的时候,提示要以管理员身份运行.才知道啥原因.
- Android其它新控件 (转)
原文出处:http://blog.csdn.net/lavor_zl/article/details/51312715 Android其它新控件是指非Android大版本更新时提出的新控件,也非谷歌I ...
- iOS开发遇到的错误 -- Label显示多行文字导致宽度和高度的问题
Label的宽度问题 注意:UILabel下面需要设置preferredMaxLayoutWidth ,设置了autolayout和numberofline的UIlabel才显示多行 label宽度的 ...
- jQ插件--时间线插件和拖拽API
这个时间轴是工作上用到的,自己写了一个, qq空间有时间轴的控件, 百度文库也有时间轴的控件: 百度的时间轴大概是这样的: 用户点击对应的锚链接, 那个三角会滚动, 然后左侧的界面也会滚动: 实际的 ...
- 理解 Mybatis的分页插件 PageHelper
Mybatis + SpringMVC + Maven实现分页查询 (推荐采用的插件是PageHelper) 先看一下之前的这篇博客,这里推荐了 Mybatis 的分页方法. 按照上面的方法设置后,确 ...
- 一起学HTML基础-利用CSS和JavaScript制作一个切换图片的网页
由于个人原因,不详细写步骤 思路: 一.布局 二.制作图片区和按钮区的div及颜色.边框.背景属性等 三.用PS将四张图片剪切到同一个尺寸,重叠放置在图片切换区,透明度设置为0 四.点击对应按钮时,将 ...