ACM 對拍

在打acm比賽時,如果一個程序實在不知道錯在哪,而剩下時間還挺充足,對拍是一個很好的手段,對拍的意思就是當前你的一個程序交上去發現答案錯誤了,但又不知道錯哪,條件允許的話,你可以寫成另一個暴搜的程序得出答案,和你wa輸出的答案相匹配,看哪裏錯了。平時訓練也可以這麼找出你的wa程序和ac的程序之間的差別。下面就展示如何使用對拍。

另附:其實比賽開始前就可以把對拍那三句話寫好,還有三個txt建好,比賽時確實要用到對拍就在程序裏寫上freopen就行了


第一步:在e盤新建一個“duipai”文件夾,(在哪個盤哪個文件夾裏將新建,這個無所謂,看個人方便)




接下來我要生成個測試數據,上代碼(這個測試數據按照題目要求自己造,也可能造不出來)

[cpp] view plain copy
  1. #include<cstdio>  
  2. #include<cstring>  
  3. #include<ctime>  
  4. #include<cstdlib>  
  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 的文本文檔




打開data.txt ,會有許多測試數據,


接下來,會用到兩個程序,一個是你寫的錯誤程序,另一個是答案絕對正確的或者是爆搜的(TLE),分別重定向到duipai裏,錯誤程序輸出爲out2,正確程序輸出爲out1,

錯誤的


正確的程序


分別運行這兩個程序後,duipai文件夾裏會多出兩個txt,out1.txt,out2.txt



下面是最重要的一步了

新建一個txt       



在duipai.txt裏面輸入




保存後,將duipai.txt的後綴改成duipai.bat



然後運行這個bat ,就可以看出對拍差距了


關於對拍結果的顯示:如果輸出結果只有Y 和 N並且一行佔一個,那麼給出不一樣的所在行後很難找到到底是哪一個錯了。 
所以最好在輸出的時候把讀入的數據一起輸出,這麼輸出文件的複雜度就大了,比較程序容易找出不一樣的地方。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章