手動造資料指南

2022-09-19 10:33:08 字數 2585 閱讀 2238

自己出了一道題,如何給它造資料呢?

首先,你要有標程,也就是 \(\texttt\),這樣你才能給自己的輸入資料生成乙個正確的輸出資料。

然後,你要有生成資料的程式,也就是 \(\texttt\),詳見part 2

大多數 \(\texttt\) 的原理都是隨機生成的,而 \(\texttt\) 可以按照模板來打,例如隨機生成乙個數列:

//執行前的準備,是在控制台(即彈出的黑框框)裡執行的:

srand(time(null)); //生成隨機數,這行必須加上

int n, maxa;

cin >> n >> maxa; //讀入 n 和 a 的最大值

freopen("hhhhc.in","w",stdout); //把你的輸入資料輸出到 hhhhc.in 檔案中

cout << n << endl; //題目的輸入資料可能第一行是個 n,在造輸入資料時要找輸入格式輸出

for (int i = 1; i <= n; i ++) cout << rand()%maxa+1 << ' '; //隨機生成 n 個整數並輸出

執行這個程式,然後彈出來乙個視窗,在裡面輸入數列長度 \(n\) 和序列 \(a\) 的最大值maxa之後,就會在.exe檔案的同一目錄下生成乙個名為hhhhc.in的檔案,裡面裝的就是乙個長度為 \(n\)、所有數均不超過 \(maxa\) 的數列。

生成乙個 \(1\sim n\) 排列(隨機資料)的 \(\texttt\) 如下:

#include using namespace std;

int p[100005]; //生成的排列

int main()

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

cout << p[i] << ' ';

return 0;

}

生成乙個隨機區間的方法:

//方法一:在 [1,n] 中隨機生成 l,然後在 [l+1, n] 中隨機生成 r

int l = rand() % n + 1;

int r = rand() % (n-l+1) + l;

int l = rand() % n + 1, r = rand() % n + 1;

if (r < l) swap(l,r);

還有很多方式可以生成很多不同的資料,這就靠大家自己去想了(

還有一些製造 hack 資料的 \(\texttt\),例如

//p7996 製造 no answer! 情況的 gen

cout << 114514;

for (int i = 1; i <= 114514; i ++) cout << 1 << ' ';

展示一下 p7996 的 \(\texttt\):

#includeusing namespace std;

int main()

\) 都必須在同一目錄下。

製造輸入資料用你的 \(\texttt\) 就行了。

例如,上面那個 p7996 的 \(\texttt\),只需要執行並生成1.in後,把1.in手動改成2.in3.in\(...\) 然後分別執行就能夠生成這些輸入資料了。

如果中途你需要生成 hack 資料,更改你的 \(\texttt\) 即可。

在存放資料的目錄下建乙個output.cpp檔案,下面輸入:

#includeint main()

然後,你的 \(\texttt\) 不要加freopen,執行這個output.exe,然後你就會發現你的目錄下多了乙個run.bat檔案,執行這個檔案並等待彈出的視窗關閉,你就會發現你的輸出資料都造好了。

你的 \(\texttt\) 的名稱必須為std.cppgen.cppstd.exegen.exe,否則生成輸出資料時會出錯。

你的資料名稱最好為1.in2.in\(...\)x.in1.out2.out\(...\)x.out,否則你需要更改你的output.cpp

上傳資料時需要把檔案壓縮成乙個資料夾,名稱最好為data.zip,裡面除了輸入資料和輸出資料之外不要放任何東西。(如果你想造特殊評測可以塞進checker.cpp等檔案)

點個贊再走唄 \(\sim\)

有不當之處可以提出哦 \(\sim\)

\[\large\texttt

\]

互動造題指南

寫在前面 這篇文章寫在聯合省選 2022 兩天後。筆者此前造互動題時發現全網都搜不到好上手的教程。筆者意識到自己進集訓隊的可能性為 0 打算寫一篇部落格,在退役之前留下真正有用的東西。noi 風格的互動題就是通過函式呼叫實現互動。我們假設題目的名字叫做 test 那麼通常乙個互動系統中需要這樣的幾個...

造輪子 python手動實現OTUS

最近研究閾值化演算法,otus算是目前應用比較廣泛的,自己想實現otus看和opencv對比,哪個用時短 最後經numba加速後還是失敗,opencv的otus演算法速度是自己手寫的轉換速度的5 10倍。果然現成的輪子是比較好用的 otus法又稱最大類間方差法或者大津法,基本思想就是計算前景類與背景...

如何造資料

當我們自己想出題時,就需要我們自己出資料啦qwq。這裡以出a bproblem的資料為例qwq。模板 include includeusing namespace std define rand rand 15 rand const int maxn 1e5 40 char a maxn b max...