今天是禮拜一,又來到了三週一次的計程考試。前天我幾乎整天都在寫程式,而昨天就更誇張了,只有最後一兩個小時讀微積分,其餘整天都是在寫程式。我寫程式的原因不單是因為為了練習今天的考試範圍,更是因為在 Judge Girl 上解題的成就感太強了,簡單分析原因:
- 題目做完會打勾,分類還會填星星,沒做空心,做過半滿,做完全滿。
- 題目難度超出舒適圈一點點,解題的成就感非常充足。
- 網站有解題數量排行,隨著自己解題數的上升,自己的排名也不斷飛升,這是最大的成就感來源,也是讓我題目一做在做的原因,因為真的太令人著迷了,到現在已經是歷史 59 位、年段 2 位了。
- 每題的程式速度也有排行,我會稍微讓自己程式跑快一點,如果有贏過別人很多也會很有成就感,例如別人要 1.5 s,我卻只要 100 ms 以內,算是滿足虛榮心吧。
我這兩天總共做了約 23 題,看起來不是個大數字,但是若以每題一小時來看,那就是 23 小時,雖然實際上應該沒有這麼久。
我已經把 Judge Girl 的 motto 設成了:
I’m not the best, but I’m trying my best.
前往考場
早上騎車快到系館時,才發現忘記帶課本了,教授說考試的時候可以看課本,但我完全沒看過,估計這次也不會看,但是保險起見我還是回去宿舍拿了,額外花了不少時間。進到電腦教室已經約 9:05 了,我走到白板前查看座位表,發現怎麼是梅花座,但我也瞬間就認知到有一半的人都停休了,沒退選的人再被當一些的話,教授開學說出的預言就成真了:
看看你左邊的同學,再看看右邊的同學,你們其中一個會停休,一個會被當。
教授說他每年開學都會都會跟同學說怎麼做才不會被當,但每年還是有大比例會被當掉。連結:教授開學警言。
考試開始
pA. Convert a uint64_t array, CC=2/2.2, 20min
第一題看起來很簡單,CC 只有 2.2。題意是給一堆 64 bit 的 unsigned integer ,然後每次讀最右邊的五個 bit ,就可以表示 0 ~ 31 ,然後要把這五個 bit 代表的數字轉成字元 a=0, b=1…, z=25,每個 integer 會讀到 12 個字元,真的是挺簡單的。練習的題庫中有一題是要從左邊開始讀,還要要把全部串起來讀,比這個考試的題目還麻煩,雖然中途遇到了括號的 BUG ,不過我還是三兩下就做出來了,花了約二十分鐘。
pC. Friend Cover, CC=10/10.6, 80min
我先做這題是因為 pB 看起來很複雜,而且教授還特別說要 Error Check,還表示說很麻煩。
有 N 個人,給定 M 對朋友,找出最小組合,使得每對朋友都至少有一個人被選中。
我當下的想法就是想到昨天新學到的東西,先選一個人,然後把他的朋友從備選名單中劃掉,再繼續從備選名單中挑選,如此遞迴下去直到備選名單清空。
我做了很久,但答案始終不對,我花了半個小時 Debug 都找不到問題,後來重新審視演算法,發現我的演算法從頭就錯了。
我一開始的想法會有一個問題,我用例子來解釋:
假設有三個人,三對朋友,分別是
(0, 1), (1, 2), (0,2)
如果我按照我原本的想法選了 0 之後,1 和 2 就被劃掉了,第二對便不會滿足。
所以到最後我還是只能慢慢地暴搜,到地回最底部再 Check,印象中很快就做出來了。丟上去 Judge ,AC!我超驚訝,因為這題後面 50 分是要解決 TLE 才能拿到的,也許是我練習量多了,我自然而然就會用效率比較好的方式來做,再加上我用了 bit operation 來加速,bit operation 真是個好東西,之後再寫幾篇文章來傳教好了。
pB. Parse a boolean operation, CC=15/22.8, 80min
給予多個 bit opertion 字串,輸出結果,如果語法錯誤則輸出 invalid,直到 EOF。
這題想法很簡單,而且他有給提示,我很快就做出來了,範例測資也全對,我送上 Judge ,WA 0。這場考試怎麼那麼令我驚訝啦,只對了 Sample ,令我百思不得其解,一樣 Debug 了三十分鐘才發現是 A && B
及 A || B
順序的問題,我把 parse()
放在 B 的位置,A 放先前得到的布林,這導致很有可能不會執行 parse()
,就導致錯誤了,修正後便得到 WA 70 了。
考試時間剩下二十分鐘,我已經得了 270 分,累積分數也已經過了學期及格線了,但我還想做出剩下的三十分,也就是要進行 Error Check。我一步一步慢慢找出可能有語法錯誤的地方,隨著時間接近下課,我的心跳愈來愈快,但結果始終都是 WA 70。最後一個 Submit 約在 12:18 ,終於被我找出所有的 Error,成功拿到 AC。
考試結束
我心情極度雀躍,上次破台是第一次,之後成績就慢慢降低,而這次終於又破台了,看來是努力的成果呢!我每題的 CC 都低於真強者的平均,甚至 pB 還低了 7 個 CC ,後來看到成績分布,考試人數 36 ,只有兩個破台,而其中一個就是我,多令人滿足啊。
我愈來愈愛 Judge Girl 了,我正在考慮之後要不要當助教,可以碰後臺,甚至是出題審題,好想要為這個網站貢獻一點。