這次noip看到旁邊用c++那位對拍得好爽,
自己也搜了一下對拍的方法,
可惜多不適合pascal黨,
所以我中和幾種方法,終於弄出了乙個用 命令提示符對拍的方法。
首先要有乙個 百分百對的程式
我寫了個排序
a.pas
varn,e:longint;
a:array[0..1000]of longint;
procedure init;
vari:longint;
begin
read(n);
for i:=1 to n do read(a[i]);
end;
procedure main;
vari,j:longint;
begin
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
begin
a[0]:=a[i];
a[i]:=a[j];
a[j]:=a[0];
end;
end;
procedure print;
vari:longint;
begin
for i:=1 to n do write(a[i],' ');
end;
begin
assign(input,'in.txt');
assign(output,'o1.txt');
reset(input);
rewrite(output);
init;
main;
print;
close(input);
close(output);
end.
還要有乙個待檢驗的程式,快拍(經檢驗是正確的,呵呵)
b.pas
varn,e:longint;
a:array[0..1000]of longint;
procedure init;
vari:longint;
begin
read(n);
for i:=1 to n do read(a[i]);
end;
procedure qsort(x,y:longint);
vari,j,k:longint;
begin
if x>=y then exit;
i:=x;
j:=y;
k:=a[(x+y)div 2];
while i<=j do
begin
while a[i]
while a[j]>k do dec(j);
if i<=j then
begin
a[0]:=a[i];
a[i]:=a[j];
a[j]:=a[0];
inc(i);
dec(j);
end;
end;
qsort(x,j);
qsort(i,y);
end;
procedure print;
vari:longint;
begin
for i:=1 to n do write(a[i],' ');
end;
begin
assign(input,'in.txt');
assign(output,'o2.txt');
reset(input);
rewrite(output);
init;
qsort(1,n);
print;
close(input);
close(output);
end.
還要有乙個 資料生成器
maker.pas
varn,i:longint;
begin
assign(output,'in.txt');
rewrite(output);
randomize;
n:=random(1000)+1;
writeln(n);
for i:=1 to n do
writeln(random(maxlongint)+1);
close(output);
end.
最核心的部分就是這裡
新建乙個文字文件,字尾名改為「.bat」
在裡面打
:loop
maker.exe
a.exe
b.exe
fc o1.txt o2.txt
if errorlevel 1 goto end
goto loop
:end
dos語言:loop//迴圈
maker.exe//執行 資料生成器
a.exe//執行 正確程式
b.exe//執行 待檢測程式
fc o1.txt o2.txt//比較 兩個程式的輸出結果
if errorlevel 1 goto end//如果 有錯誤(兩個輸出檔案不一樣) 就跳到end
goto loop//跳到loop
:end
或者還可以這樣寫
:loop
maker.exe>in.txt
a.exeo1.txt
b.exeo2.txt
fc o1.txt o2.txt
if errorlevel 1 goto end
goto loop
:end
要是這樣寫,a b maker 三個程式中都不能些檔案讀入/輸出
:loop
maker.exe>in.txt//執行 資料生成器 把結果輸出到 in.txt
a.exeo1.txt//執行 正確程式 讀入為 in.txt 輸出為 o1.txt
b.exeo2.txt//執行 待檢測程式 讀入為 in.txt 輸出為 o2.txt
fc o1.txt o2.txt
if errorlevel 1 goto end
goto loop
:end
注意:
1.程式檢測的是執行程式,而不是源程式。所以每改一次源程式都要編譯一次。
2.dos中貌似不識別 .in .out 檔案,所以要用 .txt
對拍程式寫法
一口毒奶 bat的寫法 echo off loop rand.exe in txt mycode.exe in txt myout.txt baoli.exe in txt baoliout.txt fc myout.txt baoliout.txt if not errorlevel 1 goto...
0712 插曲 對拍
今天下午的時候聽yyy學長講了講對拍,下面總結一下下 大概就是拿你自以為的正解與你實實在在寫的暴力,進行輸出比較。相當於與標答進行比較 前提你的暴力是正確的 然後發現不同的地方,對 正解 程式進行修改,這樣可以提高你演算法的正確性。首先你要有輸入資料吧,而且必須是隨機的,按照題目要求的輸入。那麼我們...
ACM程式對拍
刷過acm題的同學應該都有這種體會,感覺自己已經考慮的很充分了,但就是一直wa,這時候,如果有乙份能夠保證100 正確的 再加上題目資料比較好利用隨機數創造時,便可以使用對拍來找到錯在哪些資料上了。我們需要三個exe檔案加乙個bat檔案再加兩個txt檔案。首先我們先建立乙個資料夾,在資料夾裡新建乙個...