對拍方法 pascal

2021-06-28 13:26:10 字數 3514 閱讀 5869

這次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檔案。首先我們先建立乙個資料夾,在資料夾裡新建乙個...