ACM 对拍

在打acm比赛时,如果一个程序实在不知道错在哪,而剩下时间还挺充足,对拍是一个很好的手段,对拍的意思就是当前你的一个程序交上去发现答案错误了,但又不知道错哪,条件允许的话,你可以写成另一个暴搜的程序得出答案,和你wa输出的答案相匹配,看哪里错了。平时训练也可以这么找出你的wa程序和ac的程序之间的差别。下面就展示如何使用对拍。

另附:其实比赛开始前就可以把对拍那三句话写好,还有三个txt建好,比赛时确实要用到对拍就在程序里写上freopen就行了


第一步:在e盘新建一个“duipai”文件夹,(在哪个盘哪个文件夹里将新建,这个无所谓,看个人方便)




接下来我要生成个测试数据,上代码(这个测试数据按照题目要求自己造,也可能造不出来)

[cpp]  view plain  copy
  1. #include  
  2. #include  
  3. #include  
  4. #include  
  5. int main(void)  
  6. {  
  7.     freopen("e://duipai//data.txt","w",stdout);  
  8.     srand(time(NULL));  
  9.     int n=10000;//n多少自己定  
  10.     while(n--)  
  11.     {  
  12.         printf("%d\n",rand());  
  13.     }  
  14.     return 0;  
  15. }  

运行上面这个程序后,duipai里面就会生成一个data.txt 的文本文档


ACM 对拍_第1张图片


打开data.txt ,会有许多测试数据,ACM 对拍_第2张图片


接下来,会用到两个程序,一个是你写的错误程序,另一个是答案绝对正确的或者是爆搜的(TLE),分别重定向到duipai里,错误程序输出为out2,正确程序输出为out1,

错误的ACM 对拍_第3张图片


正确的程序ACM 对拍_第4张图片


分别运行这两个程序后,duipai文件夹里会多出两个txt,out1.txt,out2.txt

ACM 对拍_第5张图片


下面是最重要的一步了

新建一个txt       

ACM 对拍_第6张图片


在duipai.txt里面输入


ACM 对拍_第7张图片


保存后,将duipai.txt的后缀改成duipai.bat



然后运行这个bat ,就可以看出对拍差距了


关于对拍结果的显示:如果输出结果只有Y 和 N并且一行占一个,那么给出不一样的所在行后很难找到到底是哪一个错了。 
所以最好在输出的时候把读入的数据一起输出,这么输出文件的复杂度就大了,比较程序容易找出不一样的地方。


你可能感兴趣的:(对拍,Windows技巧,编程周边技巧,C++基础)