--- title: 計畫與出題方式 tags: article --- # 進度規劃 ![](https://i.imgur.com/MXKv7q5.png) ### 每周會以2~3個題型來出題 由於人手極度不足,所以我們暫時沒辦法每周都講課。取而代之,其他周會以讓各位參考文章、嘗試理解程式概念並解題的方式。 --- # 出題方式 ### 計畫 - 每次出題都會在兩周前給出題組一些資訊,像是題目題型、可參考資料等。 - 每周的會以當周的主題出約4~6個題目。 - 每周結束後都會將題目、題解和程式碼放到GitHub上:[CYICE-DOMjudge](https://github.com/xuese0513/CYICE-DOMjudge) - 每周結束後都會將題目收併至「歷史題目」,當周若沒空完成的人都還是可以寫。 ### 題目 1. 可於一些解題網頁,挑選自己能夠通過、適合主題的題目。 (請盡量的改編原題目) 2. 自行設計題目,並確保自己能夠解出題目。 ### 測資 1. 如 Online Judge、CSES...等解題網頁皆附有測資,可以直接引用。 2. 自行生成測資,詳細可以大致參考下面「[設計測資](https://hackmd.io/@problem-solved-sgroup/HygmPqPcu/https%3A%2F%2Fhackmd.io%2F%40problem-solved-sgroup%2FH1-YCrN2d#%E8%A8%AD%E8%A8%88%E6%B8%AC%E8%B3%87)」的方式 (由於自行生成測資很複雜,所以自行生成測資有任何問題的話請務必和我說) ### 題解 請盡量自行撰寫,內容包含思路與想法、程式碼等。 ### 題目模板參考 題目模板下載:https://github.com/xuese0513/CYICE-DOMjudge/raw/main/Template.zip - **Testcases** : 測資資料夾 - **Code** : 可放範例程式碼、生成測資的程式碼之類的 - **Name.pdf** : 題目文本檔案 - **Info.txt** : 有關於題目壓縮檔的敘述(可自行在裡面補充額外資訊): ``` 【題目資訊】 - 名稱: - 題型: - 顏色:(optional, CSS color) - 時間限制:(optional) - 空間限制:(optional) 【測資(Testcases)】 - 範例測資: - 極端測資: - 隨機測資: 【其他附檔】 - 題目文件: - 範例程式碼 : - 隨機測資生成器 : ``` 題目的顏色會顯示在題目名稱的旁邊,~~就是要你幫你的題目配個色(#~~ (如果想要加其他的資訊,都可以自行修改和增加) --- # 設計測資 設計測資會是出題裡面最難的一部份,這會需要很多的反向思考。 通常測資會分成三種類型: 1. 範例測資 2. 極端測資 (測試最極端的情況,例如最逼近數字界線的資料) 3. 隨機測資 通常前兩個測資都可以用短程式或是手寫來生,而「隨機測資」就會比較難了。 以下會提供幾個生成隨機測資的方式: ### 純數字的輸入,可以直接用亂數生成輸入。 例如計算某個數列的第k項數值時,可以嘗試把k設成亂數,並將其拿去跑能夠解出題目的程式碼 ,便可以產生一個亂數測資。 ### 用C++生成測資可以參考的工具 於C++中,若要用亂數函式的話,請使用這個,<font color=red>不要使用C提供的rand()函式</font>: ```cpp= mt19937 generator( time(NULL) ); uniform_int_distribution<int> unif(1, 100); // 可自行替換1和100 (最小和最大) int num = unif(generator); // 取得亂數 ``` 於C++處理檔案的輸入和輸出,可以這樣用: ```cpp= fstream input, output; input.open("in.txt",ios::in); // 開啟檔案"in.txt",並設定為輸入 output.open("out.txt",ios::out); // 開啟檔案"out.txt",並設定為輸出 string s; input >> s; // 從檔案in.txt輸入第一段字串到s裡 output << s; // 將字串s輸出到檔案out.txt中 ``` 另外一種生測資的SOP,先建亂數,然後跑自己的程式 1. 先出生成 1.in and 1.out 設為輸入及輸出 2. 到cmd執行自己所編寫的程式(<為輸入文件,>為輸出文件) ```shell example.exe <1.in >1.out ```