[Camp] 第八屆國中生程式設計營

終於把營隊辦完了,即使是線上營隊,辦起來也沒有比較輕鬆,
可能過個幾天就忘了,所以先把心得放在這裡。

事前

好像資訊社的傳統是都要在暑假辦一次營隊來回饋這個社會(當作未來課程的試教),
所以剛交接完幹部就要來處理這個營隊了,

事前工作大概就是準備教材、然後出練習賽的題目,
教材的部分我很抱歉在前一天才生出來;w;,不過除了程式碼的一點小 bug 以外都沒有什麼問題,
而練習賽的部分就有的講了, 題目出完之後測資也沒什麼問題,不過學長跟我們講這樣的題單太難了,
所以之後就花了很多時間調整題目的難度,
會在 Day 5 再重新提到。

不過由於我有點不太認真,所以時間上拖到營隊開始還在一邊修;w;
還好最後也是沒有什麼問題。

Day 1

營隊分成兩組:基礎班跟進階班。

第一天的早上我是去教進階班函數與遞迴、位址與指標、還有複雜度分析,
時間上控制的應該還算好,但是學員好像都沒什麼互動;w;
也有可能是單純因為線上營隊的關係,跟實體的感覺可能還是有差。

進階班沒什麼問題,倒是基礎班有點小慘,
之前學長有講過基礎班可能有很多語法問題,現在就真的發生了,
例如說 ; 沒加、括號括錯、等等,有很多事情都發生了,
可能是因為我接觸 C++ 有因為用過 Arduino 而有一些 C 的底子,所以當初玩的時候蠻順的,
現在回來看我沒有出這些 bug 實在是有點神奇。

進階班的下午是排序與二分搜,不過不是我講的,
感覺他們對這些還是有點難消化,
而基礎班好像還是有很多問題;w;

Day 2

進階班是整天的 STL 容器,
上完之後我覺得這個東西真的對他們有點難消化,
即使是簡單的 set 例題他們也沒有一個能 AC,實在是有點慘,
下午的時間安排我覺得有點少,原本表定是學 priority_queuesetmap
但是實際上起來還有很多空檔,
所以我就用這些時間講了 arraypairtuple 跟一些額外的語法技巧。

不過我有發現我的講義裡的 STL 容器沒有範例,只有介紹,
或許這是為什麼他們會聽不太懂;w;

基礎班的部分出了一個小問題,就是對於題目分析的問題,
大概的情況是有學員問這一題,因為他沒有想法,
但是對於沒有想法的應該是要一步一步引導出答案,不是直接講答案,
我覺得真的好難,要帶這一步又想提示又不想直接破梗,
可能我還要練習,教出來的感覺是這邊我還是不太會;w;。

Day 3

好耶,完全沒課,
就這樣整天都在幫忙 debug,大概一天就這樣沒了。

忘記到底是哪一天了,跟學長在工作群組聊的時候又多知道了一點 TOJ 的東西,
過程中也 rejudge 了很多題,現在才發現以前好多假解 XD

Day 4

早上的課是基礎班的函數,
前幾天已經看過基礎班的狀況了,所以就把陣列的傳入拿掉,
不過我覺得可能是我教的不好,很多人的程式都會寫出這種東西:

string function()
{
    cout << "Hello";
}
int main()
{
    cout << function();
}

希望學員們最後都有好好搞懂函數 ><

接著教了下午的遞迴,直接燒光光,
原本還有對數的概念,但是我都把它拿掉了。
基本上函數不好就不用多指望遞迴會學得好了吧;w;
希望以後可以找到其他方法來解釋函數跟遞迴,不然感覺會是一場災難。

Day 5

早上是國手的經驗分享,超電,我只能被嘲諷,
下午是練習賽,
先來講一下後來的題目長怎樣:

編號 A B C D E F G H I
之前 Hello World 單層迴圈
二進位
雙層迴圈
字元
數學
閱讀題
組合DP Greedy 單調隊列
之後 Hello World 單層迴圈
總和
單層迴圈
條件式
雙層迴圈
字元
雙層迴圈
星星樹
雙層迴圈
字串處理
數學
閱讀題
組合DP Greedy

題單直接變得超簡單,不過對不起我好像沒出不用迴圈的水題
特別講一下幾題:
Problem C 是問 $N$ 個元素中可不可以取前 $K$ 個元素而且沒有同分的沒被取到,
順帶一提,這題的名稱跟那題刪掉的單調隊列一樣,
Problem E 超機車,詳細可以上去 TOJ 上看這題的輸出,
Problem G 是擴展歐幾里得,不過題目敘述應該都有提到,
Problem I 是問 $N$ 個元素中重排裡元素中相鄰相差的絕對值總和最大的解。

實際的狀況是,似乎有一隊很晚才做出 A,
然後 B 只有一隊卡,
而 C 的 AC 人數甚至比 D 少,過程中我還重新給了兩個範例測試資料,不過還是一堆燒雞,
原因有兩個:

  • $K = N$ 沒有判斷,存到陣列外面。
  • YESNO 不是 Codeforces 模式,真的有大小寫沒分好的。

有點可惜,明明這題比 D 簡單超多
接下來是 E 比 F 稍微難一點,不過應該差不多,主要的問題在:

  • E 的實作超麻煩。
  • F 有些人不會處理字串。

之前的難度預估直接失準,

然後是 G 有兩個人去撈分,H 滅台,
比較可惜的是 I 有人沒判到兩種 case, 100 分變 7 分,
另外有個元素都是 ${0,\, 1}$ 的也沒人做,有點可惜。

最終 Rk.1 是 600 分,完全沒有想要撈分 XD
然後有學員反映說這個營隊實在教得有點趕,都沒辦法好好學好,
對不起;w;,不過在這幾天要教完這些確實有點趕,也希望你們都可以繼續學習;w;

營隊就這樣辦完了,要當教學真的好難喔,
最後剩下一件事就是怎麼把 checker 放上 TOJ 了,
感謝學長的幫助還有其他資訊社社員的幫忙,

突然想到暑假過一半了還沒做暑假作業跟學習歷程,燒雞。
BOI 2020 也還沒補完