三步学会在noi linu下对拍

见网上好像没什么关于在noi linux下对拍的博客,本蒟就来发一波。

第一步 准备好相关程序

调试的时候,我们应该首先写好一个自动生成数据的程序,博主在这儿命名的是gen。然后要有一个正确(暴力)程序,博主在这采用的是std。另一个就是被测试程序,博主在这儿以做的一道题目名称为例,叫做12563。

解释一下,博主在这儿使用的vim来编写程序的。(所以你得先要会用vim,或者用其他的也可以吧)最左边第一个小窗口为输入的文件,用gen.cpp运行出来的数据储存在input.in(左上小窗口表示的文件)中。最左边第二个窗口12563.out是12563程序运行后的结果储存的文件。最左边第三个窗口std.out是std程序运行后的结果储存的文件。中间第一个12563.cpp是博主的需要被测试的程序。std.cpp是博主准备的标准程序。右边第一个窗口nick.sh是执行对拍的程序。最右边第二个窗口gen.cpp是造数据的程序。在文件夹中就是如下显示。
这里写图片描述

第二步 如何写nick.sh

那个nick是可以自己命名的。

#!/bin/bash
while true;do
      ./gen > input//造出来的数据存入input中
      ./12563 <input> 12563.out//被测试程序
      ./std <input> std.out//正确(暴力)程序
      diff 12563.out std.out//各自的输出
      if [ $? -ne 0 ];then break;fi
      echo OK
done

第三部 打开终端

利用快捷键“Ctrl+Alt+T”打开终端,进入到之前准备好的那些文件所在的目录下。博主这里是pai,所以输入cd pai即可进入(因为pai是在主文件里面,刚打开vim时就是进入主文件夹,再只需往下进入一层即可)再输入chmod +x nick.sh后,再输入bash nick.sh即可运行对拍程序。
这里写图片描述
运行之后,如果你的程序出现问题,就会有如上提示:
< Case 13: 6 970
》Case 13:6 969
这里表示第13个点有问题。
到这里就好啦。

其实可以不用写那个nick.sh,还有另一种方法,博主后来问的学长。
我们还可以一个对拍的程序,如下:

#include<cstdio>
#include<cstdlib>
int main(){
    for(int i=1;;i++){
        system("./gen");
        system("./12563");
        system("./std");
        if(system("diff 12563.out std.out")){printf("WA on test%d\n",i);break;}
        printf("AC on test%d\n",i);
    }
}

运行结果如下:
这里写图片描述

参考博客:http://www.bubuko.com/infodetail-2475500.html (此博客写的好像有点问题,博主一开始按照他写的来,结果错了,后面乱搞了一顿,碰对了QWQ)

猜你喜欢

转载自blog.csdn.net/tangzhide123yy/article/details/80845757
今日推荐