自己出了一道題,如何給它造資料呢?
首先,你要有標程,也就是 \(\texttt\),這樣你才能給自己的輸入資料生成乙個正確的輸出資料。
然後,你要有生成資料的程式,也就是 \(\texttt\),詳見part 2。
大多數 \(\texttt\) 的原理都是隨機生成的,而 \(\texttt\) 可以按照模板來打,例如隨機生成乙個數列:
執行這個程式,然後彈出來乙個視窗,在裡面輸入數列長度 \(n\) 和序列 \(a\) 的最大值//執行前的準備,是在控制台(即彈出的黑框框)裡執行的:
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 個整數並輸出
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 的 \(\texttt\)://p7996 製造 no answer! 情況的 gen
cout << 114514;
for (int i = 1; i <= 114514; i ++) cout << 1 << ' ';
然後,你的 \(\texttt\) 不要加#includeusing namespace std;
int main()
\) 都必須在同一目錄下。
製造輸入資料用你的 \(\texttt\) 就行了。
例如,上面那個 p7996 的 \(\texttt\),只需要執行並生成1.in
後,把1.in
手動改成2.in
,3.in
\(...\) 然後分別執行就能夠生成這些輸入資料了。如果中途你需要生成 hack 資料,更改你的 \(\texttt\) 即可。
在存放資料的目錄下建乙個
output.cpp
檔案,下面輸入:
#includeint main()
freopen
,執行這個output.exe
,然後你就會發現你的目錄下多了乙個run.bat
檔案,執行這個檔案並等待彈出的視窗關閉,你就會發現你的輸出資料都造好了。
你的 \(\texttt\) 的名稱必須為std.cpp
,gen.cpp
和std.exe
,gen.exe
,否則生成輸出資料時會出錯。
你的資料名稱最好為1.in
2.in
\(...\)x.in
和1.out
2.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...