• 【ACM对拍程序~】


    参考的博客~~~~

    http://blog.csdn.net/wlx65003/article/details/51149196

    新建一个批处理文件,右键新建一个文本文档,重命名为“对拍程序.bat”。(注意,平时windows是隐藏了文件后缀名的,我们需要在图片所示的位置把隐藏的文件后缀名显现再重命名)

    右键编辑,输入以下代码。

    rand.exe是数据生成程序,my.exe是自己有问题的程序,std.exe是别人的AC程序(等会再具体实现)。

    @echo off 关掉输入显示,防止刷屏。

    :loop是定位标记点,类似于c语言的goto语句。

    %random%是windows自带的随机数据发生器,可以在命令行里调用,速度比time(NULL)快,(time(NULL)一秒更新一次)。

    > data.in是将生成的随机数据重定向到一个文件。

    my.exe <data.in>my.out 是把文件data.in输入到my.exe,再把my.exe的输出重定向到文件my.out,下一行同理

    fc may.out std.out是为了比较my.out 和 std.out,windows自带的比较命令fc(file compare)。如果标程和自己的程序数据有差异,会显示。

    if not errorlevel 1 goto loop 如果fc返回的不是1(fc会在文件不同时返回1,相同时返回0),就会跳到:loop继续循环

    pause暂停,fc返回1时,循环暂停,这时可以看是哪个数据出了问题。

    goto loop,看完出问题的数据以后,按任意键,继续循环。

    @echo off
    :loop
        rand.exe %random%> data.in
        my.exe < data.in >my.out
        std.exe <data.in >std.out
        fc my.out std.out
    if not errorlevel 1 goto loop
    pause
    goto loop

    生成数据。这里我是根据hdu2639 01背包的第k个最优解的题目条件写的随机生成数据代码。

    #include<bits/stdc++.h>
    using namespace std;
    #define random(a,b) ((a)+rand()%((b)-(a)+1))
    //random(a,b)是生成[a,b]之间的随机数据 
    stringstream ss;//把字符串转为整数 
    
    int main(int argc,char *argv[])//argc是参数个数,*argv[]是参数表,从1开始 
    {
        int t = time(NULL);
        if(argc)//如果有参数 
        {
            ss.clear();
            ss<<argv[1];
            ss>>t;//把参数转换成整数传给t
        }
        srand(t);
        //以下是自己写的数据生成代码 
        printf("1
    ");
        int n = random(1,5);
        int v = random(1,100);
        int k = random(1,30);
        printf("%d %d %d
    ",n,v,k);
        
        for(int i = 0; i < n; i ++)
            printf("%d ",random(1,10));
        printf("
    ");
        
        for(int i = 0; i < n; i ++)
            printf("%d ",random(1,10));
        printf("
    "); 
        return 0;
    }

    最后只需要把自己的程序my.cpp和标程std.cpp和rand.cpp在同一目录下编译运行s生成my.exe,std.exe,rand.exe,再双击“对拍程序.bat”查看不同即可。

  • 相关阅读:
    自动同步日期dos命令 | DOS命令自动同步时间
    Mysql字符串截取,去掉时间,匹配日期等于今日
    HTML指定页面编码
    Mysql连接字符,字段函数concat()
    功能强大的截图工具snipaste
    当页面提交时,执行相关JS函数检查输入是否合法
    DOM和BOM
    JS内建對象(Math,Number,String,Date)
    JS数组基础01(数组的创建,push,pop,unshift,shift,concat,join,splice,slice,sort.reverse,indexOf,三种排序)
    总结01(对象引用的赋值与对象的复制,函数作为对象及回调递归,区分数组与对象)
  • 原文地址:https://www.cnblogs.com/hellocheng/p/7421819.html
Copyright © 2020-2023  润新知