在漫長的\(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 ...