Linux下对拍模版
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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下对拍模版的主要内容,如果未能解决你的问题,请参考以下文章