緣起


國二上的某天,蕭梓宏突然來問我要不要參加一個寫程式的比賽,故事開始。


我當時剛開始學我的第一個程式語言 — Javascript,正試圖要寫一個很酷的塔防遊戲,大概是這輩子對自己的 coding 能力最有自信的時候,想都沒想就立刻答應了。

我們選擇在蕭梓宏家參加線上比賽,測機那天花了我們不少時間理解 input、output 還有 C++ 的語法,而後接著初賽,兩個剛剛開始學 C++ 的國中生,就這樣一邊研究著他家的 C++ 教學手冊一邊進了 NPSC 國中組決賽。

決賽的時候可以帶參考資料,所以就帶了同樣那本教學手冊進去,我們最後解出的一題,是「給定 $n, m$,問擲 $n(n \leq5)$ 顆頭子湊到點數和為 $m$ 的方法數」,想到的方法是手動算出每種 $n, m$ 組合的答案然後宣告進陣列裡等待詢問,研究出如何宣告陣列再經歷過各種算錯後成功 AC。

得到了第十名,很開心,也決定明年要再來參加。


高中以前


很快到了寒假,之前上 Javascript 課的補習班開了 C++ 課程,我拉著蕭梓宏一起參加,在那邊遇到了劉至軒。從語法學起,一路到 Greedy、二分搜等簡單的算法技巧,之後報考 APCS,也順利拿到了 5/4 的成績。


國三上再度跟蕭梓宏組隊參加 NPSC,印象最深刻的是這一年決賽我們最後解出來的題目—「密碼鎖」,簡單來說,就是要枚舉 “000000” 到 “999999” 然後統計答案

「所以要怎麼跑完每種可能?」 「套很多層 for 迴圈!」

覺得這個想法超強的我於是笨笨的寫了六層 for 迴圈得到 AC,但也因為這題讓我們成功拿下第三名,獲得資訊競賽的第一份獎品 — 筆電一臺。

半年後才知道原來除了筆電,NPSC 前三名還可以保送數資班。


大約是從升上國三開始,我、劉至軒、蕭梓宏約好每週六固定到一個人的家中練習 UVa 的題目,每次戳一些感覺做得出來的題目然後大家一起思考、討論,想不出來的話就上網查解答,就這樣一邊讀會考一邊寫程式,持續了半年多,或許進步的速度不快,但是大家卻都樂在其中。

可能就是在這段時期,確定我們高中想打演算法競賽的吧!

會考完後,蕭梓宏早就上了科學班,而我跟劉至軒也都確定能進建中,感覺是時候學點新的東西了,我們找了之前上 C++ 課程的黃祐仁老師來教我們更多演算法相關的內容,從 Heap、最短路到並查集,這時也才發現原來程式解題的領域,比我所想像的還要複雜許多。


暑假時我、蕭梓宏、劉至軒首次組隊參加 ytp 少年圖靈計劃,turtlecanfly 的第一場比賽,誤打誤撞的進到了第二階段。

同時我們也組隊參加了明道黑客松,熬夜一邊吃披薩一邊打 code,設計出一個奇怪的網頁然後就很幸運的拿到基礎組(高中職組)第一名了!?


高一上


會考後蕭梓宏突然告訴我說我可以保送數資班,抱持著不念白不念的心態交了資料,就這樣靠著 NPSC 加入建中數資。說實話,當時也不確定讀資優班的意義是什麼,之後才慢慢有了一點感覺。

資訊校內初賽表現還行就進入複賽,參加了一個月的校隊培訓,聽一些像是 splay、suffix array 這種完全搞不懂也不知道從何學起的內容,最後複賽敗在二分圖著色問題,以三等獎坐收。

之後的北市賽全國賽就沒機會參加了,頂多是有空的課就跟劉至軒一起跑去電腦教室聽培訓。

最後高一只有蕭梓宏進到全國賽,而他甚至是首次參加就拿到了 rk14。


高一跟著蕭梓宏去參加數學讀書會,覺得如果資訊也有讀書會的話應該很不錯,於是我們幾個就跑去私訊AY

「學長要不要辦資訊讀書會?」

第一屆資訊讀書會就這樣誕生了。

講師由 AY、王均倍、李昕威學長組成,每週二晚上帶我們學那些資訊競賽會用到跟不會用到的演算法及資料結構,而參加的人則有我、劉至軒、蕭梓宏和一些科學班的以及後來加入的張程凱。

一整個學期的讀書會在學長們飛快的進度及超難的模競之下,光是重新理解、實作讀書會裡講的內容就已經覺得學到超多東西,而從學長們口中也對於高中資訊競賽的模式有了更全面的認識。

這個時期在學長的推薦下開始打 Codeforces,大約在青色藍色附近打轉。


高一的 NPSC,turtlecanfly 很自然的組成一隊,在強敵環伺的建中,其實原本對於進決賽沒有報太多希望,但後來初賽因為 penalty 贏過學長們一點點,就這樣不小心晉級決賽。

決賽時由於劉至軒跑去參加英文單字比賽,只剩下我和蕭梓宏,一樣講一下這次我們想做的最後一題

「給你一張帶邊權的圖,問至少要改幾條邊的邊權才能讓最大生成樹權重和 = 最小生成樹權重和」

我盯著這題想了很久,然後跟蕭梓宏說我覺得應該是要找邊雙連通分量,以前從來沒寫過這個東西,花了不少時間回想讀書會說過找橋的方法然後蕭梓宏還一直幫我 debug,但最後還是沒有 AC。

出來後聽到 BB 說這題是點雙連通還給了邊雙連通的反例,感覺就差一點點了,也讓我對於明年的 NPSC 更加期待。


高一寒假


我跟劉至軒、蕭梓宏一起報名了 IOICamp,五天的課程內容,其實很多堂都是聽到一半就開始一知半解了,還好有經過了一個學期的資讀,對於聽不懂的內容不會太恐懼,唯一真的算有完全聽懂的大概是組合遊戲,那陣子真的很喜歡賽局 xd

我覺得高一在 IOICamp 最大的收穫可能不是聽懂什麼,而是能夠知道自己還有多少東西要學吧。


寒假的另外兩件事情是入芽考跟資訊社考幹,前者讓我下學期順利進入資訊之芽,後者則是讓我花了寒假的時間試圖學了不少不常用的 C++ 語法,可惜現在忘光了(x


高一下


下學期讀書會依舊持續,除了被 AY 的群論跟線性代數搞到懷疑人生外,學長們也邀請了波路特石和蔣立元學長回來講課。

印象比較深刻的是蔣立元的那幾堂課,基本運作模式都是他丟題,然後想到的人找他去外面驗解,到了一定時間後再公佈答案。第一次上這種方式的課,很喜歡這樣的學習模式因此後來自己講課的時候也都如此效法。


我們這屆因為覺得可以再多刷點題,所以又在每週一晚上辦了小資讀,大家互相推薦題目一起練習、討論,大概也是這個時候開始跟蛋餅、王勻還有林尚廷變熟的。

後來忘記是什麼原因,總之有人提議想來做新的建中資訊競賽講義,於是六個人就開始分配工作,大概持續編了兩個多月,每個人開始慢慢拖稿,就難產到現在了(標準的建中行政效率)。

噢 然後蛋餅大概是這段時間開始嚴格超越大家的,變得又軟又電 orz


另一條線是資訊之芽,因為上學期讀書會教過了大部分的內容,資芽的課對這時候的我而言主要是複習性質。

但即便是這樣,一個學期的上機、手寫作業還是頗有收穫,利用手寫作業練習證明也練習了原本不太熟悉 Latex 語法,而上機的加分題則是常常讓我發現各種自己以前學得不夠透徹的地方。

很可惜最後因為跟班上去海外旅行導致缺了課,沒拿到優秀結業證書。


升高二暑假


因為跟家人去義大利玩了兩週又跟班上去北京玩了一週,再加上社團暑訓跟開始做專題,其實沒有剩下太多的時間寫程式。

主要時間花在 CF 上,能打的比賽都盡量參加(rating 沒什麼成長就是了),也不知道該學些什麼,只是有事沒事就到上面亂戳題目練習。


和劉至軒、蕭梓宏一樣組隊參加了 ytp 少年圖靈還有 ISSC,前者照樣進了第二階段;後者則是整隊一起大燒雞,名次超後面。

沒參加到 IONC,倒是參加了跟競程較無關的 Sitcon 夏令營,在那邊認識了同一小隊的林哲宇,跟著他一起看該年的 IOI 賽況直播,而我、林哲宇、蕭梓宏、林尚廷也在營期的最後一天一起立了明年進二階就來報名當工人的 Flag。


高二上


剛開學就是能力競賽,今年建中負責資訊競賽的老師不想用線上評測系統出題,於是我們的校內賽就變成人工 judge 了。

題目品質不論,總之最後是該進的人都進了校隊。

接下來就是高中爆請公假的開端 xd 北市賽前每天到班的時段只剩早自習,基本上一整天都是在費曼或電腦教室度過。

這段是最認真準備競賽的時期之一,平常看到蛋餅在刷 TIOJ 就跟著一起,寫了個爬蟲來專門跟題;幾乎每場 CF 都打,在這時候成功上紫;就連早上來學校時也是在公車上跟蕭梓宏一起討論題目。

市賽前的 HP codewars 跟蛋餅還有王渝立組隊,貢獻了幾題,靠著蛋餅凱瑞成功拿到第三。


北市賽前幾天莫名開始變得很緊張,大概是既然請了那麼多公假,不拿個好成績回去會很尷尬的這種感覺吧。

結果完全是場災難,題目品質出乎意料的不錯,高斯消去、約瑟夫還有多維dp都是好題目,但就是做不出來。

第十五名的成績僅能算三等獎中段,蛋餅、張程凱、蕭梓宏、劉至軒都進了全國,我則連邊都沒沾到,當晚的社慶一邊玩桌遊一邊聽同屆、學長們討論著之後的競賽準備方向,心情不是普通的糟。


「要不要繼續打競賽?」

這是北市賽結束後面臨的最大問題,王勻和林尚廷選擇了放手,我也陷入猶豫。

打競賽很好玩,不管是靈光乍現地想出題目或是看到綠色的 AC 都很有成就感,但升學很現實,而我在臺灣想讀也只想接受臺大資工。

如果是選擇放手就也不會有這篇回顧了,花了些時間和父母也和自己討論,考量自己對高中課業的掌握度,決定以暑假作為分界,在那之前就繼續認真的享受資訊競賽,盡可能不留遺憾,而後開始為升學衝刺。

事後來看當初的選擇是理性且正確的,之後如願拿下二階薦送也成功登出學測,但回顧當時的分析及考量點,或許實力注定只有二階也正是因為少了那麼一點真正願意不顧一切走下去的決心吧。


回班上後一邊挽救學期成績一邊用做專題的機會偷了些公假練習,開始正視自己技能點太少還有經典題對自已而言總是非常陌生等等的致命弱點。

資訊讀書會這個學期也成功被我們延續下來,因為同時有七個人在打競賽,不論是準備題目還是講課都相對沒有壓力,倒是因為感覺來聽課的人程度比我們去年還差,當時還頗害怕下一屆沒有人 xd


NPSC沒出什麼意外就進了決賽,這一年終於體驗到三個隊友的感覺,最後也運氣很好的靠手速優勢搶到 rk3,筆電++。

譴責蛋餅跟我借了 IOIC 講義然後就在這邊弄丟了。


高二寒假


寒假主要就兩件事,寒訓跟 IOIC,寒訓是執秘再加上中途撞到疫情實在有夠刺激,和競賽無關的另個故事了。

IOIC 因為高二認識的人多了些玩得也更歡樂,三餐時間都在打牌,拿破崙大概就是這時候開始的。

參加了 IOIC 三年,我覺得自己在高二學到最多,最大的收穫是特石的資料結構(?)課,李超線段樹、Pattern 還有線段樹優化建圖都是第一次聽到然後覺得新奇又超酷的東西。

順帶一提,回去後流感超嚴重,整個過年都只能一個人關在房間,還差點被醫生懷疑是武漢肺炎QQ


高二下


盡可能抱持著比較好的心態面對初選,但還是打得不怎麼樣,分數拿得很慢,賽中放棄人生到開始思考隔天的英雜考試到底該怎麼處理。

最後一個小時好不容易才冷靜下來,把該拿到的分數拿到,直到最後一分鐘 AC pD 才壓線進了選訓。

結論:總之有進就好(x


一模的表現就是普普通通,但因為不少人都失常了,名次出乎意料的前面。

第二週整個選訓營的氣氛低到了谷底,或許是因為今年抱著升學壓力來打比賽的人佔了多數吧。

壓力之下只能盡量放鬆,但還是花了點時間思考該怎麼面對二模,首先是不能再犯下跟一模一樣的錯誤—有 2 題拿了 0 分,再來就是跟室友王品翔討論過後簡單規劃了一下賽中的時間分配。

在升學壓力與前一週的高壓氛圍之下,二模還是無可避免的燒雞了,因為是預期之內的結果,發現腦袋只剩一片混亂後就也按照計劃開始放棄 AC 全力喇分直到結束。

事實證明對高二的我而言,這幾乎是當時的最佳策略了,雖然狀態糟到不行,但靠著那些喇到的部分分數還有其他外部因素(ex.火力全開的 judge)將自己留在了二階線內。

今年能夠進到二階,只能說運氣真的很好吧!


一階結束後因為傳出師大有確診案例,就順理成章地跟學校要到防疫假與段考免考。

這兩週大部分時間是跟蛋餅、AY、劉至軒在地下室刷題還有到處吃拉麵。

沒記錯 CF 也是在這段時間上橘的(?)


二階因為疫情改成線上,不過曹宸睿跟金刀還是北上來建中找我們玩,排除掉了升學壓力,二階的氣氛輕鬆不少,這兩週一樣吃了不少拉麵,其餘時間就是在 BTD battles 中度過。

畢竟今年實力排得上二階真的已經是勉勉強強,三模四模就也沒對自己抱太大期待,最後以 rk10 收場反而還因為沒墊底有點小小確幸 xd


選訓營一回去就接著數資科學成發季,很好玩卻也很忙,也因此後來的 APIO 幾乎完全沒有準備,最後連銅牌都沒沾到。

而到這邊高二的忙碌生活也總算告一個段落了,換了一臺 Mac,開始學一些基本的 terminal 指令跟 vim。


升高三暑假


沒去參加暑輔也沒打算碰課業,因此暑假特別清閒(?),但大部分都拿來做其他事情了。

這個暑假是 turtlecanfly 第三度參戰 ytp,終於拿到獎啦!我們和好幾隊一起並列第二,也在這時候差不多確立了我們這隊由蕭梓宏指揮我跟劉至軒輪流寫題的策略。

還有比較重要的事情可能是推薦臺大資工的準備,感謝特石學長在 Sitcon 年會時讓我問了好多問題,也感謝班導在開學後幫我的備審做了許多改正。


高三上


一個暑假回來,張程凱的實力已經讓我可以明顯感受到與他的差距,不過既然原因是自己缺乏練習也只能乖乖接受了。

校內賽、北市賽都表現得一般般,總之順利進了全國。

到全國賽之前的這段期間其實蠻快樂的,每天跟張程凱、蛋餅一起在費曼練習,每週 vir 一到兩場 OI,其餘時間補題或耍廢。

雖然一直被張程凱嘴砲跟他 virtual 的時候都偷偷在睡覺、跟賴昭勳打 generals,不過幾個月的練習還是有進步的啦xd

最大的成長就是終於開始不會看到難題就望之卻步了,而實作能力也因為一些實作量高的難題而有所提升,


中間穿插了 ISSC,有了去年的經驗,我們決定前一天晚上就先去住在附近,也是在這邊首次開始接觸動漫,被蛋餅、蕭梓宏成功推坑果青。

ISSC 不管是練習還是正式賽的題目品質都十分堪憂,還好我們這隊靠著蕭梓宏在最後十分鐘看懂英文閱測成功破臺!雖然最後只有第二,不過第一次在這種正式賽中破臺還是超開心 xd


很快就到了全國賽,老實說我原本真的以為自己至少會有前二等的(x

先是忘記 Dijkstra 不能做負邊權的 case 而卡在 pB(最後是唬爛過的),而後又發現 pI 是看過的題於是就把時間都砸上去,一直到最後 20 分鐘左右才發現原來 pF 只是旋轉過的經典題,但就來不及寫完了。

甚至是到比賽結束時我都想說 600 多分好歹有個二等獎吧,然後一看到林哲宇就被嗆三等一了,pF 真的超虧,但因為有做出全場唯一的 pI 所以失望之餘心情也不算真的太低落。

不過沒有前十的最大損失就是 AA 競程要付費 QQ


NPSC 初賽比去年還緊張,建中光進過選訓營的隊伍就有四隊,還好我開場前吃了很多巧克力所以手速夠快,最後是張程凱單刷全場 rk6 卻被刷掉。

決賽就沒什麼好說了,總之因為我簽到題傳了四次最後還是讓 turtlecanfly 以第三名收場,今年沒有筆電,改送我們一人一臺 switch。


這個學期最後且最重要的當然就是二階推薦結果啦><

順利錄取臺大資工!


高三寒假


今年的 IOIC 因為疫情關係沒什麼機會打牌,不過倒是成功推廣 generals.io。


高三下


入營考出乎異常的順利,達成在校外正式賽中拿到 rk1 的成就(x

因為去年的選訓營實在壓力太大了不好玩,今年跟蕭梓宏想要負責讓氣氛歡樂一點,白天的時候拉著大家看動漫、打 generals 和 Jstris,晚上就是玩桌遊、狼人殺。

一模、二模的表現正常到不能再正常,對題目都沒什麼想法就乖乖把小測資拿完,也沒做出什麼特別難的 subtask,最後以第 7 名進到二階。


在一階二階的這中間幾週一不小心就上紅了(x


反省了一下一階的表現,覺得可能是因為太放鬆才拿不出最好的表現,再加上意識到自己真的就要從高中競程圈畢業了,二階第一週在心態上變得比這一整年下來認真許多,跟著 vir 了幾場,也真正專心上了幾堂課,

最後三模還是爆炸了,只能說三個禮拜前才開始做夢真的還是太遲了,接下來的一整週就在玩 COC 和準備 ytp 報告中度過,國高中的資訊競賽生涯也在這裡匆匆劃下句號。


結語 & 雜言


很可惜這並不是個 Happy Ending,也終究是帶著一絲遺憾地向高中競程道別。

但所幸過程就已經足夠值得了。


不知道如果當初選擇放下一切全力衝刺競賽會是什麼樣子。

我享受理解新演算法的喜悅、和隊友一起合作的經驗,更享受自己想出題目而後成功 AC 的那份成就感。但同時,我也同樣享受和四校一起揮灑青春的過程、和劉至軒為了各種專題到處趕著 deadline 的忙碌,更享受和 326 這三年來在南澳、新加坡、北京等各地所創造出的美好回憶。

如果有機會在過去的某個時刻重新選擇,我還是會在短短高中三年想盡辦法去緊握這所有的一切吧!


關於資訊競賽帶給我什麼
  • NPSC T-shirt $\times$ 5
  • YTP T-shirt $\times$ 3
  • Facebook Hackercup T-shirt $\times$ 1
  • Google Codejam T-shirt $\times$ 1(離真正拿到可能還要一年)
  • 全國賽 T-shirt $\times$ 1
  • Switch $\times$ 1
  • 筆電 $\times$ 2
  • 六週捷絲旅(高二線上二階qq)
  • 總之很多的獎金
  • 很多披薩跟拉麵
  • 保送數資班
  • 第二類市長獎
  • 薦送臺大資工

國二時決定去參加一個完全不知道在幹嘛的比賽絕對是我人生中到目前為止做過最正確的決定,沒有之一。


最後想感謝資訊競賽,是你讓我知道跌倒後是可以再站起來的,是你讓我認識了更多多志同道合的朋友,也是你帶給我充實到接近爆炸的高中生活。

也真心謝謝那些曾經在資訊競賽這條路上幫助過我、陪我一起成長的人們。

開始期待自己即將在臺大資工創造的下一段精彩故事!