首页 > 代码库 > Linux下对拍模版

Linux下对拍模版

Windows版本传送门:http://www.cnblogs.com/shamman/p/7336917.html

 

捣鼓了半天NOILinux,算是差不多搞明白了,以后大概会用NOILinux刷题多一些吧。

 

数据生成器(与Windows下写法无异)

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define random(a,b) ((a)+rand()%((b)-(a)+1))
 4 
 5 stringstream ss;
 6 
 7 int main( int argc, char *argv[] )
 8 { 
 9     int seed=time(NULL);
10     if(argc)//如果有参数
11     {
12         ss.clear();
13         ss<<argv[1];
14         ss>>seed;//把参数转换成整数赋值给seed
15     }
16     srand(seed);
17     //以上为随机数初始化,请勿修改
18     //random(a,b)生成[a,b]的随机整数
19 
20     //以下写你自己的数据生成代码,根据题意写
21     printf("1\n");
22     int n=10;
23     int m=random(1,20);
24     printf("%d %d\n",n,m);
25     for(int i=0 ; i<n ; ++i)
26     {
27         printf(" %d ",random(0,m));
28     }
29     printf("\n");
30     return 0;
31 }

 

对拍程序

 1 #!/bin/bash
 2 while true; do
 3     ./rand $RANDOM > data.txt //数据生成器
 4     ./std < data.txt > out1.txt //正解
 5     ./my < data.txt > out2.txt //你写的正确性未知的程序
 6     if diff out1.txt out2.txt; then
 7         echo AC
 8     else
 9         echo WA
10         exit 0
11     fi
12 done

 

保存为.sh后缀的文件(这里以test.sh为例),然后把三个程序放在一个目录下。

用的时候先Ctrl+Alt+T打开终端,然后输入cd 你的文件目录(右键文件属性可以看到路径,全部输进去,大小写也要完全一样,注意这里要全部是英文路径,不然无法识别),回车。

再输入sh sh.test,回车。

这个时候对拍就开始跑了,如果两个程序的输出没差别的话你会看到很多很多行AC,检测到差别时对拍会停下来,你可以在终端看到两个程序分别输出的内容,在目录下的data.in里可以找到出错的这组数据。

 

对拍还是很实用的,建议背下来,到了考场等密码的时候可以先把对拍敲出来,每道题先写暴力再想正解,然后再拍一拍就稳多了。

Linux下对拍模版