CPE考試心得

Posted by John on 2016-01-14
Words 2k and Reading Time 6 Minutes
Viewed Times

(最後更新時間: 20160322)

[CPE考試心得] - 3/22更新

擷取

我在大一的下學期開始考CPE,在此之前我並沒有任何經驗(參加CPE的時間點比我接觸競技程式更早)所以我也不知道該往什麼方向準備,就這樣懵懵懂懂的上了,然後當然就被電慘了xD

現在雖然也是很不起眼,但多少有點心得: CPE的題目是按造難易度去分的,簡單的都會在前面,但也沒有一定,有時候有些簡單題也會出現在後半段的題目,所以還是可以大致瀏覽後再開始動工。一般來說有一題一定是一顆星選題,也就是說,把題目都做過一次後理論上應該是可以對一題以上的。

按照題目敘述打就可以解決的問題大約是前兩題,第三題開始就是要稍微思考一些寫法了(資料結構、演算法……)所以就開始有困難度了。

考試的時候,由於題目是全英文,如果又遇到很長的題目常常會卡很多時間在讀題,所以有時候先看題目的範例輸入跟輸出來判斷這是在做什麼,能節省蠻多的時間。

然後CPE有一些怪怪(?)的功能,像電子辭典、C++函示庫……有時候還蠻方便的。

剩下的說明我之前在巴哈上有看到一位寫的心得文章,覺得很詳細 考試前該準備、注意的都有了,可以參考看看

第一次考試(3/24)

雖然說有題會從一星選題中出,但考的時候還是沒全部寫完 抱著「沒這麼雖吧」的心態去考了,結果還真的出我沒做過的題目…

考試前的練習 看到第一題Hello World還愣了一下 然後花了30秒把它寫出來還蠻有信心的,誰知之後的時間角度跟DNA-Sorting就卡住了。

考試開始後雖然沒看過,但是第一題還是在不知道「degree是什麼意思」(題目好像是9’s….)的情況下努力做出來了,並且預設測資都過了,但暗中測資就是過不了哀哀。

第二題忘記是什麼,不過也是測資都過了暗中測資卻過不了,當下真的很沮喪阿,第一次的3小時就這樣無功而返。

第二次考試(5/26)

第一次考完後,抱著一定要再把一星題做完的心態度過了這三個月,但最終還是沒做完(不~~)。

不過出乎意料的,這次的題目難度似乎沒有上次那麼難,第一題是很簡單的loop。

第二題的時候手太急沒按到看題就直接解了,一度還看不懂題目再說甚麼,後來才知道是單純的排序找答案,解完花了不少時間。

第三題是陣列比對,只要換個角度去想,用對角線來找大小就能解出來,覺得題意了解是很重要的。

寫完三題才花了8X分鐘整個很興奮,看了第四題,要用Linked List去模擬佇列,但我沒有實際實作過,最後就在部分測資過的了部分過不了的情況下放棄了。

最後看了看成績,44名,耶~通過畢業門檻了!

第三次考試(10/6)

這次考試原本是頗有信心的,畢竟暑假也稍微特訓過了,結果……。

題外話,這是考試的時候,系統一堆問題,搞得無法準時開始,有點糟糕。

不得不說這次的第一題難度真的比二、三題難: 找一個字串的最大子字串,這題以前做過,是被歸類為兩顆星難度的題目,第二題的字串反轉還簡單多了。第三題則是數學問題,求最大效益的加班費分配方式,我當下一直想到Greedy……

後來看到解法只需要兩個Sort時超不甘心的,不然就三題了。 第四題就真的沒辦法了,雖然看得懂題目但完全沒想法。

之前暑訓交到的中正同學這次四題,真的覺得他好猛……。

第四次考試(12/22)

這次考試…先說總結,幹,超幹的。

學校的考試環境真的爛到一個爆炸,上次被雷過連這次也被雷,正式開始的第一題是很簡單的題目,把所有位數加起來直到位數等於一就是答案了,然後我居然卡了40分鐘!!一TLE,不斷的Debug到最後只剩一行gets()也無法過,最後很不耐煩地把所有可能都試了,弄成cin才能過(回家後自己重寫了一遍,確定我當下的寫法是可行的)。

第二題枚舉所有的可能再作排序即可,當時覺得數量太多可能會爆炸,好險沒有。

第三題是要模擬七段顯示器,這題當時真的卡到我了,想不出辦法只好用最笨的方法,不斷的去switch所有情形…但是前面的時間卡太多了,判斷沒時間做完就放棄了。

第六題則是先透過線性篩法+DP先把資料存完,然後再比對即可,但這題當時只剩15分鐘,可能太緊張所以有哪部分寫錯了並沒有過。

最後只過兩題,真的很不甘心……哀哀下次可能要換學校考了。

第五次考試(3/22)

這次仍舊選了在自己學校考,抱著沒有那麼雷吧?的心態,但是仍然還是被小雷了一下(測試環境期間整間教室的系統是死當的,所以根本沒有寫道練習題也無法測試環境,還好環境是可以正常使用的),然後第二題的時候系統又當了一次,又花了些許時間重寫第二題不過後面就沒雷我這點十分慶幸。

這次總共過了五題,很開心自己的題數有所進步外,也覺得這次的難易度有點偏易:

第一題根本水題,要算馬力歐總共往上跳了幾次往下跳了幾次,設兩個變數去存值即可。

第二題字串轉換,按照鍵盤上的格式往左移一個輸出該字元,一開始先把表建好去做Search即可。

第三題要找Ascii出現的頻率,建個表去存每個字出現的次數以及頻率最大值,然後由後往前搜並依序印出與最大值相同的值即可。

第四題質數問題,已經好幾次考試都有出質數問題了,看了一下N的範圍感覺一般做法也不會爆,不過我還是覺得線性塞法學起來後真的很方便,寫法也很容易上手。

這題稍微再邏輯上卡了一下,想說要如何依據奇數和偶數的長度去找中心點……當下先用DP做了一次長度計算,再去找prime[長度/2] 就會是中心點,把往前跟後面各c個輸出即可。

第五題大數運算(大數擺第五題??)就大數…每次看到這種題目都會好想去學java,根本秒殺。不會用java的我在這題上debug了不少時間(太久沒寫大數了..),所以後面沒什麼時間做其他題了。

總結起來這次的難度真的降低不少,不過答對這麼多題還是很開心的,繼續努力演算法或許之後可以有更好的成績。


>