隨機資料生成與對拍

2022-05-19 07:26:50 字數 2299 閱讀 9185

在漫長的\(oi\)生涯中,你肯定遇到過這些情況

這時候,我們就可以試試隨機資料生成與對拍`

顧名思義,就是針對我們的需求生成隨機的資料。比如生成隨機的整數序列,生成隨機的樹,生成隨機的圖。

對拍說白了就是對答案,舉個栗子:在文化課中,對於同一道填空題,我們在寫出自己的答案後,可能會找其他同學對一下答案,看是不是一樣的。放在\(oi\)中,就是對於同一道題目,兩個不同的人寫了兩份不同的程式,再針對同一組資料,看看兩份程式的輸出結果是否一樣。

比方說在無法獲得實**測反饋的比賽中(\(noip\)),對於一道題目,你思考並實現了乙個「高分解法」,但不能確保這個程式是否完全正確,這種情況下,就可以考慮編寫乙份隨機資料生成程式,乙份用正確但是會\(tle\)的暴力演算法寫的程式,然後將兩個程式對拍,看是否輸出結果一致。

要是暴力都不會打,那就輸出隨機資料騙分吧

參考《演算法競賽高階指南》p439

先給出隨機資料生成的模板,適用於此文中所有的生成資料方法

#include #include #include using namespace std;

int random(int n)//生成乙個[0,n-1]範圍內的數

int main()

```cpp

//隨機生成n(n<=1e5)個絕對值在1e8之間的整數

int n=random(100000)+1,x;

for(int i=1;i<=n;i++)

printf("%d ",random(x*2+1)-x);

putcha('\n');//可有可無

```

```cpp

//隨機生成1~n(n<=1e5)的排列

//stl的方法

int n=random(100000)+1,a[100050];

for(int i=1;i<=n;i++)

a[i]=i;

random_shuffle(a+1,a+n+1);//庫檔案algorithm

for(int i=1;i<=n;i++)

printf("%d ",a[i]);

//瞎搞方法

int n=random(100000)+1,bool vis[100050];

for(int i=1;i<=n;i++)

```

```cpp

//隨機生成m個[1,n]的子區間

for(int i=1;i<=m;i++)

```

```cpp

//隨機生成一棵n個點帶邊權(<=100000)的樹

for(int i=2;i<=n;i++)

```

```cpp

//隨機生成一張n個點,m條邊的無向圖.

paire;//內填寫陣列大小

map,bool> h;//庫檔案map

//先生成一棵樹,保證聯通

int n=random(具體大小),m=random(具體大小);

printf("%d %d\n",n,m);

for(int i=1;i

假設此時我們已經編寫好了三個程式:

自己編寫的「高分解法」程式,名為「sol.cpp」,改程式輸出答案到data.out中。

自己編寫的「暴力解法」程式,名為「bf.cpp」,該程式輸出正確答案到data.ans中。

自己編寫的隨機資料生成程式,名為「random.cpp」,該程式輸出隨機資料到data.in中

依次編譯這三個程式,得到三個exe檔案,然後執行如下程式即可。

#include #include #include #include using namespace std;

int main()

else printf("accepted, 測試點 #%d, 用時 %.0lfms\n",t,ed-st);

//如果輸出結果一樣,那麼輸出程式執行時間

} return 0;

}

無法獲得資料:

完結撒花 

typed by zbwer 2019-08-31

部分**引用李煜東的《演算法競賽高階指南》

Linux下對拍指令碼與隨機數生成器

新建乙個文件 check.sh 作為對拍指令碼.bin bash while true do 死迴圈 data 1.in 執行資料生成器,將資料輸出到1.in std 1.in out1 std是標準 暴力 程式 now 1.in out2 now是現在要被測的程式 if diff w out1 o...

生成隨機資料

生成隨機資料 一 生成int型資料 簡單地生成n個隨機資料 數字大小在int範圍內 include include include int main 每次執行該程式得到的隨機數都是一樣的,因為種子相同 改變種子,每次執行程式可以得到不同的隨機數 得到種子需要乙個函式srand m 引數m決定了種子,...

對拍及資料生成

對拍可以提高題目的得分率。對拍前先將std和my程式執行出exe檔案來,考試結束前不要忘了刪掉對拍語句,改成要求的檔案操作。1 include 2 3using namespace std 45 intmain 6 else puts ac 20 21 beat 資料生成 生成隨機數 define ...