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 网络管理的重要性不言而喻,这些管理依赖于网络工具,比如最常用的 ...
随机推荐
- FineUI(专业版)高清大图赏析!(第二波)
FineUI(专业版)是由三生石上全新打造的基于 jQuery 的专业 ASP.NET 控件库,计划在七月下旬正式发布. 选择FineUI(专业版)的四大理由:1. 简单:专业版和开源版兼容(v4.x ...
- 生成 PDF 全攻略【1】初体验
经历过多少踩坑,翻看过多少类似博客,下载过多少版本的Jar,才能摸索出正确的代码书写方式,才能实现项目经理需求分析书中的功能点. 本文借一次 JavaEE 生成PDF的颠簸的实现过程,描述中小公司程序 ...
- .net程序员转行做手游开发经历(二)
上篇主要介绍自己个人的经历,这篇主要讲下学习新语言的过程. 上次说到最终选择的语言是swift,框架用spritekit,上次有网友对为什么选择用这俩呢,为什么不用cocos和unity呢,cocos ...
- .Net简单图片系统-简介
系统简介 最近做了一个简单图片系统,这个系统就是 将上传的的图片保存到系统本地文件系统或者基于fastdfs的分布式文件系统中,在查看图片时会直接请求此系统或者fastdfs的tracker服务器(需 ...
- Windows7 x64配置 Apache2 + PHP5 + MySQL5
1:相关软件下载: Apache HTTP Server 版本:(httpd-2.2.25-win32-x86-openssl-0.9.8y) PHP ...
- 使用 Socket 通信实现 FTP 客户端程序(来自IBM)
FTP 客户端如 FlashFXP,File Zilla 被广泛应用,原理上都是用底层的 Socket 来实现.FTP 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通 ...
- 支持向量机通俗导论(理解SVM的三层境界)
原文链接:http://blog.csdn.net/v_july_v/article/details/7624837 作者:July.pluskid :致谢:白石.JerryLead 出处:结构之法算 ...
- MD5加密与验证
package com.study; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException ...
- linux基础-第十三单元 硬盘分区、格式化及文件系统的管理二
第十三单元 硬盘分区.格式化及文件系统的管理二 文件系统的挂载与卸载 什么是挂载 mount命令的功能 mount命令的用法举例 umount命令的功能 umount命令的用法举例 利用/etc/fs ...
- SQL Server数据库转换成oracle
来源:http://blog.csdn.net/hzfu007/article/details/6182151 经常碰到需要把sql server的数据迁移到Oracle的情况. 在网上查找一下,有很 ...