有时候在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程序对拍的更多相关文章

  1. 多个程序对sql server中的表进行查询和插入操作导致死锁

    最近在做一个项目,是要用多个程序对sql server中的相同的数据库进行操作(查询和插入),所以在开始的时候常会出现死锁问题,后来在网上进行了咨询,发现了一些解决方法,留作大家参考: 并发去操纵一张 ...

  2. JAVA程序对MYSQL数据库加锁实验

    什么是脏读,不可重复读,幻读 1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据. 2. 不可重 ...

  3. ACM数据对拍程序

    #include<cstdio> #include<cstdlib> #include<ctime> int main() { long s,t; while(1) ...

  4. 结合自己的程序对thinkphp模板常量的理解

    先上个图,有时候路径很多,没理解会搞混,看手册的说明 页面login.html模板的访问路径为http://www.tp.com/index.php/admin/Manager/login,测试他的常 ...

  5. 编写一个程序对Largest函数进行测试,找出一组数据的最大值

    源程序代码: import java.util.Scanner; public class findmax { public static void main(String[] args) { // ...

  6. 用程序对hdfs进行操作。

    调试加安装了半天,怎么也没有配置好怎么通过Eclipse直接连接hdfs,最后我还是打成一个jar包放到Linux虚拟机中运行的. 运行命令Java -jar  XXX.jar. 当中对hdfs的操作 ...

  7. 使用java程序对oracle添加触发器时,报错:索引中丢失 IN 或 OUT 参数:: 1

    解决方法: 执行sql语句时,使用java.sql.Statement代替java.sql.PreparedStatement. java.sql.PreparedStatement ps = con ...

  8. 201671010127 2016—2017-2 通过一个小程序对Java的再认识。

    学习了将近四周的Java语言,对于Java语言,我也有了更进一步的理解,出于对Java语言的喜爱,我总是喜欢没事的时候,自己敲一些很简单的代码,一边学习Java语言,一边对比C语言,往往可以帮助我们更 ...

  9. Linux网卡驱动程序对ethtool的支持和实现

    Linux 的一个显著特点就是其强大的网络功能,Linux 几乎支持所有的网络协议,并在这些协议基础上提供了丰富的应用.对 Linux 网络管理的重要性不言而喻,这些管理依赖于网络工具,比如最常用的 ...

随机推荐

  1. FineUI v3.3.2发布!目前最稳定版本,五年陈酿!

    关于FineUI基于 ExtJS 的专业 ASP.NET 控件库. FineUI的使命创建 No JavaScript,No CSS,No UpdatePanel,No ViewState,No We ...

  2. Webwork 学习之路【03】核心类 ServletDispatcher 的初始化

    1. Webwork 与 Xwork 搭建环境需要的的jar 为:webwork-core-1.0.jar,xwork-1.0.jar,搭建webwork 需要xwork 的jar呢?原因是这样的,W ...

  3. Clock Skew , Clock Uncertainty和 Period

    本文将介绍FPGA中和时钟有关的相关概念,阅读本文前需要对时序收敛的基本概念和建立.保持关系有一定了解,这些内容可以在时序收敛:基本概念,建立时间和保持时间(setup time 和 hold tim ...

  4. JQuery fullCalendar 时间差 排序获取距当前最近的时间。

    let time = (wo: WoDto) => wo.ScheduleTime || wo.ScheduleStartTime; let wo = technician.wos .filte ...

  5. 实用工具 : Xaml Power Toys

    最近挺忙, 憋了一肚子的东西没有分享. 今天分享一个 Xamarin.Forms / WPF 的增强工具 , Visual Studio 扩展 : Xaml Power Toy 可以直接在 VS201 ...

  6. jQuery Ajax 处理 HttpStatus

    今天同事碰到一个问题:当服务端Session失效后用ajax请求数据,页面端无法提示和执行跳转.我最先想到是,在后端用js输出一个跳转.发现输出没有效果,因为ajax是异步请求, 需要在success ...

  7. linux命令行安装使用KVM

    一.说明 本篇文章介绍的是基于centos环境来安装的,ip地址192.168.4.233 二.检查CPU是否支持虚拟技术 egrep 'vmx|svm' /proc/cpuinfo 如果有输出内容表 ...

  8. SQL2008R2 不支持用该后端版本设计数据库关系图或表

    向下不兼容. 要么安装SQL2012,要么把SQL2012数据库通过脚本转成2008

  9. STM32 (战舰)

    一.战舰STM32 1.引脚描述表---有ft 兼容5V 2.原理图----有ADC,不兼容5V 3.(1)学会基本外设:GPIO输入输出,外部中断,定时器,串口. (2)学会外设接口:SPI IIC ...

  10. Libliner 中的-s 参数选择:primal 和dual

    Libliner 中的-s 参数选择:primal 和dual LIBLINEAR的优化算法主要分为两大类,即求解原问题(primal problem)和对偶问题(dual problem).求解原问 ...