1.隨機生成數據:數據結構
1.隨機生成一個數:dom
很是簡單啦也是,這裏的mod取決於你要生成的數最大想要多大;測試
int random(int mod){ return (long long)rand()*rand()%mod; } int main(){ freopen("data.in","w",stdout); srand((unsigned)time(0)); printf("%d",random()); return 0; }
2.隨機生成整數序列:spa
隨機生成n<=10e5個絕對值在10e9內的整數code
int random(int mod){ return (long long)rand()*rand()%mod; } int main(){ freopen("data.in","w",stdout); srand((unsigned)time(0)); int n=random(100000)+1; int m=1000000000; for(int i=1;i<=n;i++){ a[i]=random(2*m+1)-m; printf("%d ",a[i]); } }
3.隨機生成區間列:blog
隨機生成m個[1,n]的子區間,這些區間可做爲數據結構題目的操做序列;io
int random(int mod){ return (long long)rand()*rand()%mod; } int main(){ freopen("data.in","w",stdout); srand((unsigned)time(0));
for(int i=1;i<=m;i++){ int l=random(n)+1; int r=random(n)+1; if(l>r) swap(l,r); printf("%d %d",l,r); } }
4.隨機生成樹:編譯
隨機生成一棵n個點的樹,用n個點n-1條邊的無向圖的形式輸出,每條邊附帶一個1e9之內的正整數權值;class
int random(int mod){ return (long long)rand()*rand()%mod; } int main(){ freopen("data.in","w",stdout); srand((unsigned)time(0)); for(int i=2;i<=n;i++){ int fa=random(i-1)+1; int val=rand(1000000000)+1; printf("%d %d %d\n",fa,i,val); } }
5.隨機生成圖:map
隨機生成一張n個點m條邊的無向圖,圖中不存在重邊,自環,且必須聯通。保證5≤n≤m≤n*(n-1)/4≤1e6;
int random(int mod){ return (long long)rand()*rand()%mod; } int main(){ freopen("data.in","w",stdout); srand((unsigned)time(0)); pair<int,int> e[1000005]; map<pair<int,int>,bool> h; for(int i=1;i<n;i++){ int fa=random(i)+1; e[i]=make_pair(fa,i+1); h[e[i]]=h[make_pair(i+1,fa)]=1; } for(int i=n;i<=m;i++){ int x,y; do{ x=random(n)+1,y=random(n)+1; }while(x==y||h[make_pair(x,y)]); e[i]=make_pair(x,y); h[e[i]]=h[make_pair(y,x)]=1; } random_shuffle(e+1,e+m+1); for(int i=1;i<=m;i++){ printf("%d %d\n",e[i].first,e[i].second); } }
而後寫一套暴力命名爲bf.cpp,一套你認爲的正解命名爲sol.cpp,而後將其編譯,注意要寫freopen,同時放到一個文件夾下面(應該吧)(這裏直接放到C:了),而後運行如下程序:
無論怎樣必定要保存的運行:
#include<cstdlib> #include<cstdio> #include<ctime> int main(){ for(int T=1;T<=次數;T++) { system("C:\\random.exe"); double st=clock(); system("C:\\sol.exe"); double ed=clock(); system("C:\\bf.exe"); if(system("fc C:\\data.out C:\\data.ans")) { puts("Wrong Answer"); return 0; } else printf("Accepted,測試點#%d,用時 %.0lfms\n",T,ed-st); } }
end-