day_14-acm 对拍

百度官方:

在信息学竞赛中,尤其是考试的时候,经常会出现把水题写水的情况,而题目那一两个单薄的测试数据常常不足以让我们发现自己程序中的BUG。在竞赛时,水题悲剧了的话下场一定会很惨。在这种情况下,我们可以采用写一个对拍程序的方法来大大降低出错的可能。
基本思路是对于一道题目来讲,写出高效算法后,时间充裕的情况下再写一个纯暴力的算法,写一个数据生成器,对你的程序和暴力程序的结果进行比对,出现错误后就人工检查。一般来讲数据范围一开始可以小一点,小数据过了以后再慢慢扩大,为保证正确性你在写下一题的时候可以让对拍程序一直跑着。

对拍程序就是在不知道数据的情况下,验证自己代码wa在那组数据上的神器。当然,首先你需要一个标准的程序

你需要的东西:
1.一个理论上,能够AC的程序;
2.你的WA程序;
3.一个能够产生随机数的程序;
4.一个windows批处理文件。
步骤
1.先建立一个文件夹,将四个程序放到同一个文件夹中;
2.你的代码还需要.in和.out文件,标准文件需要一个.out文件;
3.运行一下三个代码,产生的.o和.exe文件当然要在一起了;
4.执行check.bat文件。

就像这样
文件构造
1.产生随机数的代码
*产生int型数据(无符号整型)

#include <iostream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int gR()
{
    int x=rand()%(1<<15);
    int y=rand()%(1<<15);
    return (x<<15)|y;
}
int main()
{
    srand(unsigned(time(NULL)));
    int a=gR() % 99999;
    cout<<a<<endl;
    return 0;
}

*产生double型数据

  #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include<time.h>
    int main( )
    {
        srand( time( NULL ) );
        printf("%.6lf\n",rand()*1.0 / 100 );
        return 0;
    }

*产生char型数据

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<time.h>
int main( )
{
    srand( time( NULL ) );
    printf("%c\n",rand() % 26 + 'A' );
    return 0;
}

2.check.bat文件

g++ makedata.cpp -o makedata.exe

:1
makedata.exe > a.in
a.exe < a.in > a.out
a_std < a.in > a_std.out
fc a.out a_std.out
if %errorlevel%==0 goto 1
pause

切记保存成 .bat 文件
执行
最好先压缩一下,使得文件在一个文件夹中,然后运行一下.exe文件,再执行check.bat文件。当两者输出数据有区别是,就会pause了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值