2023.11.03 PM 00:30 by CBJ
這次是我人生中第六次 CPE,由於疫情解封,所以離家近的虎科大終於開放外校生,這次我邀請同學和學弟一同參與,只是同學由於繳費上遇到技術上的問題無法報名,所以最後剩下我和學弟兩人。
由於之前已經在 CPE 獲得專業級,因此這次的目標是獲得最高等級 – 專家級,因為已經參加了非常多次,這次也比之前幾次還要不緊張許多。
在正式賽開始之前,會有約 50 分鐘的練習賽讓大家熱身,很幸運的是,我居然在練習賽時獲得了全國第一 (???),連我自己都覺得有點詭譎,但由於是練習賽,所以其實沒有想太多,就當作是一個小確幸。
很快的正式賽便開始,我首先打開第一題,感覺比以往都還要難以理解,這個節奏感覺十分不妙 XD,經過反覆地讀題之後,我大概猜出解法就開始實作了,題目大概是,給定若干個小字串,我們需要設計一個大字串,使得把大字串放進所謂的 “跑馬燈” 之後,會依序在某一刻看到給定的小字串 (跑馬燈的長度 = 小字串的長度),請輸出大字串的長度最短可以多短。(ex:假如小字串是 ABC, BCD, DAB,那麼只要大字串是 ABCDAB,就可以在跑馬燈依序看到 ||ABC||DAB → ||BCD||AB → ||CDA||B → ||DAB||,這樣一來,ABC, BCD, DAB 就都有照順序出現在跑馬燈上了,所以答案是 ABCDAB 的長度 = 6)

實作上也只需要去維護那個跑馬燈即可,假如目前沒辦法滿足當前的小字串,那麼就一直讓跑馬燈繼續跑,否則當跑馬燈跟小字串前綴相同時,就可以直接讓跑馬燈變成小字串,雖然講起來很難懂,但只要畫一張圖就可以理解了,實作也不到太難。通過範例測資跟人工測資後,我就送出了。
pA – CORRECT (17 + 0)
通過第一題之後,我就直接看第二題,題目會輸入一個數字,要求輸出最小的 k (2 <= k <= 62),使得在 k 進位的情況下,這個數字可以整除 (k-1),一樣是一個很怪的題目,但就是一個簡單實作題,只需要枚舉所有的 k,然後檢查是否整除即可,實作上有一些細節,這裡就不多贅述,一樣通過了範例測資,所以我直接送出。
pB – WRONG-ANSWER (1)
所以一如既往,我開始亂改,然後送出。
pB – WRONG-ANSWER (2)
又一次 WA 之後,我開始盯著程式看,結果馬上看出問題,我的 k 只枚舉到 61 …,所以當我把它改成 62 時…
pB – CORRECT (44 + 40)
真是謝囉。
接著就繼續看第三題,看起來就是一個找規律題,因此建議各位直接參考[題本],因為規律不難找,所以我花了十幾分鐘便完成送出。
pC – CORRECT (62 + 0)
第四題則是一個括號運算式的問題,只是運算式只有矩陣乘法一種,對於每筆運算式,請輸出總共需要幾次小乘法 (矩陣乘法會有很多小乘法),假如遇到非法情況則輸出 “error”,因此這題只需要一些矩陣乘法的小知識以及 stack 解括號運算式的技巧,就可以解出此題,我在計算紙上算一下後便開始實作,寫完就直接送出。
pD – CORRECT (91 + 0)
感覺蠻順的,比賽大約過了一半就解出了四題,於是我開始看第五題,似乎是一個數學問題,看了以後沒有頭緒,事後才知道是要歸約成經典貪心,接著又看了第六題,想出了一些不知如何證明的作法,因此沒有成功實作出來,沒想到我的作法竟然是官方解答 (???),但我到現在還是不知道為何是好的,就這樣在五六題中來來去去,不知不覺就接近尾聲,我打開記分板一看,怎麼會如此慘烈,解出 5 題以上只有 20 人,而我竟然成為了第 37 名,我已經不知道該開心還是難過,即使沒有達成目標,但意外地成為了前 1% 的考生,也就是說,我在這次 CPE 超越了 99% 的大學生 XD。
這一次的屬實是歷屆最難的 CPE 之一,平均每人只解出 0.6 題 QQ,但也很高興自己可以拿這麼高的名次!希望 12 月場可以簡單一些,可以順利完成專家級的目標!
