天天看點

noilinux中如何對拍程式

以前一直沒有寫過對拍,學生會拍但我一直隻是觀望,沒有寫過,今天請大佬學生講了下如何對拍,感覺還比較好了解,是以記錄下本文章用來以後的查錯用。教學相長,很有道理!

  以下對拍的目的是為了檢查未确認的正解和确認的暴力在小資料的情況下找bug.

  在同一個目錄下準備的檔案有 :

    1.在确認中的标程:zzn.cpp

    2.确認正确的暴力:baoli.cpp

    3.寫好的按題目要求生成的随機數程式:data.cpp

 下面以某題來說說如何對拍。具體做法分成以下幾步:

  1.在同目錄下建立檔案cmp.sh,用gedit打開編輯,輸入如下代碼:

#!/bin/bash
while true; do
	./data  > data.in
	./zzn.cpp < data.in  > zzn.out
	./baoli.cpp < data.in > baoli.out 
	if diff zzn.out baoli.out; then
		printf "AC\n";
	else
		printf"WA\n";
		exit 0;
	fi
done
           

2.回到終端,cd定位到該目錄,輸入指令:sh cmp.sh

  這樣就可以看到程式在随機出來的資料運作結果進行比較,沒有錯誤會顯示AC,直到出現WA就會停止,并且能在data.in檔案中看到導緻兩個程式運作結果不一樣的資料。

  3.接下來便可以通過這個資料來進行分析程式找bug了。

繼續閱讀