對拍教程(自用)
寫在前面:
沒有掌握對拍啊,每次都是上網(wǎng)賀別人的代碼,寫一份自己用吧。
對拍,是一個比較實用的工具。它能夠非常方便地對于兩個程序的輸出文件進行比較,可以幫助我們實現(xiàn)一些自動化的比較輸出結(jié)果的問題。
Step1:準備
很明顯,有對才有拍,你要一份暴力代碼,一份你的正解。
編譯后放在同一個文件夾中。
Step2:數(shù)據(jù)生成器
生成隨機數(shù):
#include<sys/timeb.h>
signed main(){
struct _timeb T;
_ftime(&T);
srand(T.millitm);
}
在下方使用 x=rand()就會生成隨機數(shù)。
Windows 系統(tǒng)下 rand() 生成的隨機數(shù)的范圍在 0~32767
Step 3: 操作
-
system("A.exe > A.txt");指的是運行 A.exe,把結(jié)果輸出(>)到 A.txt 中。 -
system("B.exe < A.txt > C.txt");指的是運行 B.exe,從 A.txt 中讀入(<)數(shù)據(jù),把結(jié)果輸出(>)到 C.txt 中。 -
system("fc A.txt B.txt");指的是比較 A.txt 和 B.txt ,如果兩個文件里的數(shù)據(jù)相同返回0,不同返回1。
#include<bits/stdc++.h>
using namespace std;
signed main(){
while (1){//一直循環(huán),直到找到不一樣的數(shù)據(jù)
system("數(shù)據(jù)生成器.exe > in.txt");
system("A.exe < in.txt > A.txt");
system("B.exe < in.txt > B.txt");
if (system("fc A.txt B.txt")) //當 fc 返回 1 時,說明這時數(shù)據(jù)不一樣
break; //不一樣就跳出循環(huán)
}
return 0;
}
注意事項:
A,B,數(shù)據(jù)生成器都不能寫freopen

自用)
浙公網(wǎng)安備 33010602011771號