這幾天去參加了台大舉辦的「程式解題競賽集訓營」,一共五天的營期。這五天下來,白天要學習各種進階的演算法與資料結構課程,晚上還有消耗腦力的競賽,每天從早上 8:30 到晚上 10:00 的行程可以說得上是相當的精實。不過可惜因為週日要參加多益考試,所以只能放棄最後一天的課程以及每天晚上的競賽了(沒考到 750 沒工作啊!)。其實我也已經碩二了,根本就沒有競賽資格,所以這次去參加這個營隊的目的其實是:

  • 朝聖 world final 等級的神手
  • 學習更多技巧希望可以教給學弟妹

個人覺得這個營隊其實挺不適合初學者,這幾天的課程內容主要有這些:

  • dynamic programming
  • Sprague–Grundy theorem
  • stack
  • queue
  • priority queue
  • disjoint set
  • Treap
  • segment intersection
  • convex hull
  • rotating calipers
  • tree
  • maximum clique
  • maximum flow
  • advanced dynamic programming

最簡單的內容大概就是 stack 與 queue 了吧,但對於還不太會寫程式的人來說應該連這兩個主題都很吃力了。以成大來說,我們通常都是從 I/O 開始教起,而且這次營隊有大部份都是高中生,素質差異真大。這些高中生也都好強,我的隊友之一是成功高中的高三生,基本上大部分我會的演算法他都會…。而我斜對面的更是威猛的誇張,據說晚上的競賽該隊伍都是冠軍,上網查了一下他的名字,詩一位令人敬佩的人物。

這幾天有不少內容也都是我當初在練習競賽時完全沒學過的演算法,在與營隊的討論問題時也令我很驚訝這些人腦筋怎麼這麼清楚!突然覺得我跟他們差距好像比我想像中的大不少,更讓我確信我那些競賽名次應該都是運氣好拿到的…。

這次營隊中有個有趣的競賽是「debug challenge」,這個競賽的進行方式是題目會給予題目敘述以及一份「錯誤」的程式碼,請將該程式碼修正並上傳。但是事情沒那麼簡單,除此之外還有修改字元數的限制!!!!這真的是太…。在這場競賽中,竟然還有透過新增註解的方式來達到修改的目的!因此某個題目就只要兩個字元 // 解決…。但以為就這樣而已嗎!!沒想到如果某隊伍想到比題目規定的修改字元數更少的解法的話,可以要求題目修改上限為該字元數。因此,很多人就被 rejudge 給搞掉了XD。實在是很刺激的競賽,真想也在成大半一個來玩玩!

最後,真的很感謝台大這些同學們,願意花費這麼多的心思與時間來規劃這一場營隊。並且願意將你們的所學教導給大家,讓更多台大以外的學生能有機會學習到更多進階的演算法,並也能在世界的舞台上發光發熱!

再次送上十二萬分的謝意。