zoukankan      html  css  js  c++  java
  • 【程设课发帖】对拍

    当我和室友一起端坐在电脑前,为bug头痛的时候,对拍方法往往会让问题好解决一点。

    如果屏幕前的你也有这样的困扰:

    • 测试数据过得了,但是保密数据总有几条WA了
    • 小数据过得了,大数据过不了,但是自己造大数据很麻烦
    • 有bug藏得很深,运行了很多次都没找到

    那么,我建议你试一试对拍。

    什么是对拍

    借用网上博客中的说法,对拍就是你给两个程序,和一个随机数据生成器,然后系统去用这个随机数据生成器的输出作为你这两个程序的输入,然后比较你这两个程序的输出,可以找到一组使这两个程序输出不一样的数据(如果存在的话)。

    对拍程序会把这两个不一样的输出“打在公屏上”,你可能根据这个正解和你的WA解,反推出你代码中的问题所在。

    怎么写对拍

    材料:

    my_code.exe, std.exe, data.exe, bat.txt,将它们放在同一个文件夹下。

    my_code.exe 是你的代码运行后生成的可执行文件。

    std.exe 来自正确代码。它可以是TLE的暴力算法代码,也可以是你室友已经AC过的代码,还能是网上找的AC代码。总之,只要结果是对的就行。

    data.exe 来自你写的随机数生成代码,下面会简单介绍怎么写。

    接下来如果没看得很明白,推荐看这篇简单易懂的博客https://blog.csdn.net/code12hour/article/details/51252457。毕竟,我的语文不太好。

    方法:

    1. 随机数生成代码的写法如下。可以根据不同题目输入格式的不同,对其进行修改。

    #include<bits/stdc++.h>

    using namespace std;

    int main(){

    srand(time(0));

    int a;

    a=rand()%100;

    printf("%d ",a); 

    return 0;

    }

    2. 对拍程序的写法如下:

    :again

    data > input.txt

    std < input.txt > std_output.txt

    my_code < input.txt > my_code_output.txt

    fc std_output.txt my_code_output.txt

    if not errorlevel 1 goto again

    pause

    写好后,把后缀名从.txt改成.bat,双击即可运行。

    如果要修改,可以右键-编辑。

    运行界面

    下图就是结果不一致时,我们看到的界面。可以看到,正确答案是7,而被debug的代码错误输出了6。

    如果对拍程序一直运行,总是不停下来,就说明它没有拍出你的问题。

    如果对拍程序没有拍出你的问题,那么你可以试着改变你造出的随机数的数据范围,或者干脆放弃对拍方法,老老实实地用另外的方法debug——毕竟,对拍只是检验代码的众多方式之一而已。

  • 相关阅读:
    循环语句
    JAVA-数据类型、变量、常量
    JAVA——程序流程控制——循环语句——for循环(打印三角形)
    循环语句
    JAVA基础学习1
    新手上路
    mysql内置函数之事务
    mysql内置功能
    mysql内置函数之视图
    pymysql模块
  • 原文地址:https://www.cnblogs.com/nishida-rin/p/13689405.html
Copyright © 2011-2022 走看看