CPE 一星 49 題 — 上機特訓
整理自 UVa / ZeroJudge 歷年「一顆星」題,依 9 大題型分類。語言:Python。目標:穩過 Level 1,進攻 Level 2–3。
考試格式提醒。 CPE 一場考 7 題、3 小時,難度為 ★×3、★★×2、★★★×1、★★★★×1,每題只有「對/錯」。對 1 題 = C 初級、2 題 = B 中級、3 題 = A- 進階級。這 49 題全是一星題 ★ —— 練熟它,至少吃下考場那 3 題一星。完整報名/評分/合格標準看 考試資訊。
為什麼用 Python,這站怎麼用。 Python 整數無上限,大數題(10055、10929…)直接做、不必煩惱溢位。用法很簡單:到「題庫」把每題照 讀懂 → 默寫 → AC → 隔天再默 跑一輪,狀態會自動記錄。建議先看「讀書方法」3 分鐘,再背「Python 起手式」,下手就不卡了。
選一個題型開始
不必照順序 —— 從你最有把握的題型先拿下,建立手感。點卡片直接進入該題型的練習。
關於這個網站
這是一個為了準備 CPE(大學程式能力檢定)而做的個人學習輔助站:把歷年「一顆星」常考的 49 題依題型整理,附上題目、思路與可執行的 Python 解法,幫你穩拿 Level 1、進攻 Level 2–3。
- 免責聲明:站內題目敘述是自行整理的摘要、解法為學習參考用;實際題目、測資與考試規定一律以 官方網站與原題為準,不保證完全無誤。本站為非官方網站,與 CPE 主辦單位無關。
- 你的進度:預設只存在你自己的瀏覽器(localStorage);只有在你主動「建立同步碼」後,才會把進度上傳雲端,用來讓手機/電腦同步。也可用頁尾的「匯出/匯入備份」手動搬移。
- 致謝與來源:49 題是 CPE 廣為流傳的「一星必考」題庫;題目與判題來自 UVa Online Judge 與 ZeroJudge;考試技巧參考多位考生的公開分享。每題解法都在本機用官方範例測過。
- 著作權與聯絡:題目著作權屬原作者/UVa Online Judge;本站僅提供自行整理的摘要與原創解法供學習之用。若你是內容權利人,或對任何內容有疑慮,歡迎來信告知,我會儘速處理或移除:(電子郵件載入中…)
歡迎自由分享給需要的同學,祝大家都順利通過 CPE。
CPE 考試資訊 & 合格標準
先搞懂遊戲規則,目標才會清楚 —— 知道「對幾題=什麼等級」,再開始練最有效率。
這是什麼考試
CPE(Collegiate Programming Examination,大學程式能力檢定)由「大學程式能力檢定委員會」主辦、多所大學協辦提供考場。台灣許多大學資工系把它列為畢業門檻。考的是程式設計、資料結構、演算法與解題能力。
報名方式
- 對象與費用:大專在學學生(含研究生)免費;社會人士 500 元。
- 怎麼報:先到官網註冊帳號 → 報名該梯次,全程線上。
- 官網:中山大學 CPE、銘傳大學 CPE(各梯次的報名與考試時間、考場以官網公告為準)。
- 多久一次:一年約 4 梯,通常是 3、5、10、12 月的星期二(例如 2025 年為 3/25、5/20、…、12/9)。同一梯由多所大學協辦、有很多考場,所以看起來場次很多,其實是「同一次考試、在不同學校舉行」—— 你挑離你近的考場報名即可。確切日期一律以官網最新公告為準。
考試形式
- 時間題數:3 小時、7 題。
- 難度分布:★×3(一星)、★★×2、★★★×1、★★★★×1。這個網站的 49 題練的就是那 3 題一星 ★。
- 可用語言:C / C++ / Java / Python。
- 考場規則:不能攜帶任何資料、字典、書包、食物、手機、電子媒體進場。
評分方式(ACM-ICPC 制)
- 每題只有「對 / 錯」,滿分 7 分(7 題)。
- 排名先比答對題數;題數相同再比罰時=每題從開始到答對的分鐘數,加上該題每次錯誤提交 ×20 分鐘。
- 對「拿到第幾級」來說只看答對幾題,罰時只影響排名。但仍建議:沒把握別亂交,每次 WA 都會累積罰時。
合格標準(成績等級)
CPE 依你答對幾題給等級,可上網申請成績證明(每份 NT$100)。下表為官方對照:
| 等級 | 英文 | 答對題數 | 能力說明 |
|---|---|---|---|
| C 初級 | Beginner | 1 題 | 具簡單程式編寫能力 ← 你的最低目標 |
| B 中級 | Intermediate | 2 題 | 能用程式處理簡單問題(常見畢業門檻) |
| A- 進階級 | Advanced | 3 題 | 能用程式解決一般常見問題 ← 你的進攻目標 |
| A 專業級 | Professional | 4~5 題 | 熟悉基礎演算法與資料結構 |
| A+ 專家級 | Expert | 6 題以上 | 熟悉各種進階演算法與資料結構 |
| F 零級 | Zero | 0 題 | — |
所以你的策略很合理。 把這 49 題(全是一星 ★)練熟 → 考場那 3 題一星至少吃下 1~3 題 → 穩拿 C 初級 ~ A- 進階級。先求對 1 題(C 初級),有餘力再往上。各校畢業門檻不同(常見「一次過 2 題」或「累計過 3 題」),實際以你自己學校規定為準。
題庫 · 9 大題型 · 49 題
每題附 ZeroJudge 連結(可交 Python)與思路提示。練到能「蓋住範例、自己默打一次就 AC」就標「已熟練」。
錯因筆記本 · 0 則
你標成「練習中/已熟練」的題目,可以在每張卡片寫下這次 WA 的原因(輸入沒讀到 EOF、輸出多換行、邊界沒處理…)。這裡幫你收成一張清單 —— 考前一天回來只讀這頁,把自己一犯再犯的錯補起來。
讀書方法
為什麼「默寫」比「死背」有效 —— 給「會寫但常卡住」的你。
CPE 一星題會「換數字、換包裝」,背字元沒用,要背「套路」。把每一題練到能「蓋住範例、自己重打一遍並 AC」,這同時就在訓練你的邏輯。每題都照下面四步跑一輪:
點「去做題」看原題,特別盯死 輸入/輸出格式(一星題最常死在格式,不是邏輯)。
看一份正解,逐行問自己「這行在幹嘛」。卡住就回來看卡片上的思路提示。
關掉範例,自己重打、送出,直到 AC。錯了先看判題回饋(WA/PE/TLE)對症下藥。
AC 了標「練習中」;隔 2~3 天再默寫一次,還能一次過就標「已熟練」。
6 週衝刺排程(每天 2 題就好,重質不重量)
題型 1·2·3
公式 / 進位 / 整除 —— 最簡單、CP 值最高,先建立信心。
題型 4·5
字串 / 字元頻率統計。
題型 6·7
排序 / 模擬 —— 考場最常出,重點練。
題型 8·9 + 弱項
幾何 / 雜項 + 全部默寫第二輪。
限時模擬
找一份歷屆,計時 3 小時只攻一星題。
心態
考場先挑「會的」做、先拿下一星題再說;某題卡住超過 15 分鐘就先跳下一題,最後再回頭。你的目標是先過 Level 1,不是把每題都解完。
想再深一層? 上面這四步是精簡版。刷題升級那頁是完整版 —— 卡住時的 5 分鐘規則、UMPIRE 六步解題框架、四色進度表、AI 該怎麼用不該怎麼用,整理自一位 10 個月從零到 AWS offer 的完整刷題路徑。
內容依據。 這套方法建立在通用的學習科學 ——「默寫」即主動回憶(active recall)、「隔幾天再默」即間隔複習(spaced repetition),兩者都有記憶研究支持;再結合競賽程式常見的「重刻、AC 後回頭」練法,並針對你的情況(Python、會寫但常卡、先求過一星)調整。不是抄自某份補習資料。
刷題升級 · 從 CPE 到北美面試
一位文組轉碼、10 個月拿下 AWS offer 的完整刷題法。這頁把她的方法翻譯成 CPE 考場用得上的版本 —— 並老實標出哪些現在用不到。
先劃邊界,別整包吞。 這頁整理自一支北美 SDE 面試攻略,而 CPE 是現場上機、電腦自動判題、沒有面試官 —— 她講的「講給面試官聽」那一半,在考場沒有對象。但她的學習引擎(3:7、間隔複習、四色表)和 UMPIRE 前三步,CPE 不但用得到,還更該用。第 ⑧ 段是「現在用不到、之後求職才用」的,先收著就好。
(經驗法則,非實證數據)
① AI 時代,為什麼反而更要自己刷
她給了三個理由,講的其實是同一件事:AI 讓「會寫 code」變便宜,所以「證明你自己會寫」變貴。
| 殘酷真相 | 實際發生什麼 |
|---|---|
| 公司知道你會用 AI | Meta / Google / Amazon 改了面試流程 —— 不只考「會不會寫」,還逼問「為什麼用這個資料結構、有沒有更好的解法」。只會背答案、想很久才擠得出來,直接掛 |
| OA 開始反偵測 | HackerRank、CodeSignal 導入行為分析,追蹤打字速度、思考時間、甚至滑鼠移動。表現太完美、速度太快反而被 flag |
| 競爭更激烈 | AI 把入門門檻拉低 → 投履歷的人變多,但職缺數沒增加甚至在減少 → 公司把篩選標準往上拉。Google 已因應 AI 作弊恢復部分實體面試 |
對你的意義(這句不是影片說的,是這站幫你接的)。 CPE 本來就是不能帶任何東西、不能上網、現場上機的考試 —— 別人現在才在補的那張「我真的自己會寫」證明,你考一次 CPE 就有了。這也是為什麼全真模測的規則寫死「不用 AI、不查資料」:能力的邊界,只有在斷網的時候才量得出來。
② 學習引擎:3 分看、7 分做
她零基礎起步時卡了整整一個月:Java 教學 → 演算法教學 → 資料結構教學,看完還是一題都沒刷,因為永遠覺得自己還沒準備好。
看影片會給你「正在學習」的錯覺。看 100 小時的游泳教學,不會讓你學會游泳。學會換氣跟划水就該下水了。
正確的姿勢叫 Just-in-time learning(要用才學),而不是 just-in-case learning(先學好以備不時之需)。她第一題 Two Sum 看解答發現要用 hash map,但不會 Python 的 dict → 當場查 → 弄懂 → 隔天自己重寫一次 → 就真的記住了。
學/做的比例是 3 : 7。 (她說這個比例有研究支持,但影片沒給出處 —— 當經驗法則用就好,別拿它當實證數據去說服誰。方向是對的:多數人卡在「看太多、做太少」。)
③ 她的四樣資源,哪些 CPE 用得到
| 資源 | 它給你什麼 | 對 CPE |
|---|---|---|
| Grind 75 Cheatsheet | 依重要度排序資料結構、每種的優缺點分析、時間複雜度表、對應練習題。專為面試設計,不會學到用不到的東西 | 用得到。那張「資料結構優先順序表」直接拿來排你的讀書順序 |
| NeetCode 150 | Blind 75 的加強版,涵蓋大公司高頻題。每題有影片+圖解+動畫,從暴力解一路講到最佳解 | 部分。題目跟 CPE 一星題重疊不多,但「暴力解 → 最佳解」的講法正是該偷的思考路徑 |
| 山景城一姐 | 中文、有 coding 背景,複雜概念講得特別有邏輯。NeetCode 講太快聽不懂時的備援 | 用得到。概念卡住時的中文救援 |
| 手寫筆記 | 研究證實手寫幫助學習。記:資料結構視覺化、演算法執行步驟、解題框架、為什麼第一次會錯、corner case、常用模板 | 最用得到。CPE 考場發紙筆 —— 在紙上想事情是你考場真的會做的動作,現在就該練 |
打字太快,會讓你以為自己懂了;手寫會逼你一步一步想,然後你會發現漏掉一堆。她用 iPad + GoodNotes,Notability、OneNote 也一樣,挑順手的就好。
④ 卡住時的 5 分鐘規則
她刷 NeetCode 的實際流程 —— 這一段可以整套搬到這站的 49 題上:
對照一下:這跟站上讀書方法的「讀懂 → 默寫 → AC → 隔天再默」是同一套,只是她多給了一條很實用的界線 —— 5 分鐘。你在題庫卡住時就用它。
⑤ UMPIRE 六步 —— 以及它的 CPE 版
她第一次面試(大學社團)「code 是寫出來了,但解釋一團亂」,才發現會寫 ≠ 講得清楚。UMPIRE 因此不只是解題法,更是溝通框架。面試的評分是四項:解決問題、溝通、技術、測試 —— 把 code 打出來只佔其中一項。
| 步驟 | 面試版(原版) | CPE 版(考場沒有面試官,這樣用) |
|---|---|---|
| U Understand | 問澄清問題、用自己的話重述題目、主動舉 happy path 與 edge case。技巧:一拿到題就問「我可以邊讀邊唸出來嗎?」—— 面試官跟得上,也不會懷疑你在偷看 AI | 沒人可問 → 改成自己盤問題目:輸入怎麼結束(T/EOF/哨兵)?數字範圍多大?輸出要不要編號、幾位小數、組間空不空行?= 解題反射 ①②③ |
| M Match | 把學過的資料結構/演算法對到這題。不要只說「用 BFS」 —— 要先提幾個可行解法,再說明為什麼選它 | 對到本站 9 大題型= 解題反射 ④。CPE 的 M 就是「一眼認出這是哪一型」 |
| P Plan | 畫簡圖、寫 pseudocode,帶面試官走一遍確認可行。最多人跳過的一步 | 考場有紙筆 → 先在紙上列步驟再動手打。跳過這步,就是「打到一半發現方向錯」的來源 |
| I Implement | 邊寫邊講。打字同時講話極難,沒捷徑,只能早點練 | 講話那半用不到;照 Python 起手式 把讀入模板打出來就好 |
| R Review | 不是寫完就結束。用 U 階段想好的 case 逐行 dry run —— 面試通常是純文字編輯器,沒有 run 按鈕 | CPE 可以本機跑,所以先跑範例;但範例過 ≠ AC,edge case 要用眼睛走一遍。3 小時很短,亂交是在燒自己的時間 |
| E Evaluate | 分析時間/空間複雜度;行有餘力談現有解法的優缺點與其他情境的最佳化 | CPE 的 E 就是「會不會 TLE」:N 多大?我這寫法是 O(N²) 還 O(N³)?跑得完嗎?= 解題反射 ② 的範圍反射 |
她說 UMPIRE 之所以有效的三個理由,有兩個在 CPE 一樣成立:
- 逼你想清楚再動手,避免亂錯 —— CPE 成立,而且是省下罰時的關鍵。
- 展現溝通能力 —— CPE 用不到(沒有觀眾)。
- 建立長期記憶,因為你是真的理解,不是背答案 —— CPE 成立,這正是「換數字換包裝也不怕」的來源。
實戰走查:用 10189 Minesweeper 跑完六步
上面那張表看過就忘,是因為它是抽象的。這裡拿你真的要考的一題走一遍 —— 題庫題型 7 的 10189 Minesweeper(把每個非地雷格換成周圍 8 格的地雷數)。六步全部在你按下第一個鍵之前就該做完四步。
① 輸入怎麼結束?→「讀到
0 0 結束」=哨兵值,不是給 T、也不是 EOF(解題反射①)。② 輸出長什麼樣?→ 每組前面要印
Field #k:,冒號要有、k 從 1 開始,而且組與組之間空一行、最後一組後面不空。③ 自己造 case:全部是雷的盤面?完全沒有雷?只有 1×1 一格?—— 面試是講給人聽,這裡是寫在紙上等等要拿來驗。
但這一步的價值在於多想一個:其實也可以反過來做 —— 不掃格子數雷,而是每顆雷去給周圍 8 格各 +1。兩種都是 O(n·m),選前者的理由是邊界檢查只集中在一個地方,比較不會漏。能講出「為什麼選這個」,才是 M;只喊出「八方向」不是。
while True:
讀 n, m;若是 0 0 就 break
讀 n 行盤面,直接存字串陣列
對每一格:
是 '*' -> 原樣放回
不是 -> 數周圍 8 格的 '*',放數字
印 Field #k: 再印盤面(第 2 組起,前面先補一個空行)
跳過這步的代價:打到一半才發現組間空行的規則沒想清楚,然後回頭改輸出邏輯 —— 那是最貴的一種錯。① 盤面直接存字串不用轉 list,
grid[i][j] 就能取單一字元。② 八方向用
for di in (-1,0,1) 巢狀 for dj in (-1,0,1)、跳過 (0,0),比手寫 8 組座標短,而且不會漏掉其中一格。完整程式碼在題庫該題的「看解法」裡。① 邊界:挑一個角落的非雷格手算一次 —— 它的鄰居只有 3 格,不是 8 格。確認
0 <= ni < n and 0 <= nj < m 真的擋住了越界。② 組間空行:只有一組時,後面不該多一個空行;兩組時中間剛好一行。用 U 階段造的 case 各跑一次。
CPE 可以本機跑,但「範例過了」只證明 happy path。角落跟空行都不在範例裡。
CPE 的 E 只有這一個問題:跑不跑得完。答案是「跑得完」就停手交卷 —— 不要為了漂亮再去最佳化,那是在燒你剩下的 6 題的時間。
怎麼用這一頁。 別把六步當成「解完題再回來對照」的檢查表 —— 那樣永遠練不起來。下次在題庫點開任何一題,先照 U→M→P 在紙上跑一遍再開編輯器,就這一題也好。你會發現真正省時間的不是 I,是 P。
⑥ 進度追蹤:四色表 + 間隔重複
她刷完 NeetCode 150 之後沒有急著刷新題,而是回頭刷第二輪、第三輪。她的原話很值得記:「刷幾題」跟上岸沒有因果關係 —— 重質不重量。
- 節奏:同一批題刷 2–3 輪,每輪之間隔 2–4 週(一週後複習一次、一個月後再一次)。
- 四色表:Day 1 大多是白(幾乎全要重學);Day 2 一次寫對標綠、有 bug 或寫不完整標黃、完全忘記標紅;Day 3 只重做紅+黃;還很多就 Day 4、Day 5 繼續。
- 重點不是表格漂亮,是科學地看見進度,而不是憑感覺自我評價「今天狀態好/不好」。
這個你已經有了。 站上的題庫三態就是這張表:未開始=白、練習中=黃/紅、已熟練=綠。差別只在她把「有 bug」跟「完全忘記」分成兩色。你要更細的話,就把完全忘記的那題退回「未開始」,效果一樣。另外題庫上方的「今日推薦」本來就是照間隔複習在挑:「練習中」隔 2 天、「已熟練」隔 7 天會自動被推回來提醒你重默 —— 那是「單題」的間隔;她講的 2–4 週是「整輪」的間隔,兩個疊著用剛好。
⑦ AI 的正確用法:助教,不是提詞機
「AI 應該是 teaching assistant,不是 teleprompter。」她當面試官時看得出來 —— AI 的答案很 general,問一百個人有五十個用 AI,答案都長一樣,非常容易露餡。
她給的兩個時機,共同點是都在「事後」:
CPE 版:讓 AI 幫你列「這題我該先確認哪些輸入輸出細節」,練久了就內化成反射。
注意順序:先自己 AC,再拿去問。反過來就變成提詞機了。
⑧ 心態:學習曲線不是線性的
- 第一次寫刷題網站寫不出來,完全正常。能秒解的是稀有天才。
- 前 50 題可能一片迷茫,第 80 題突然開竅 —— 學習效果是指數,不是線性。實際數字因人而異,重點是別在轉折點之前放棄。
- 蓋房子比喻:地基打很久都看不到房子,地基好了房子就很快立起來。
- 卡題不代表你不適合寫程式,是大腦正在長新的神經連結,那本來就需要時間。
⑨ 現在用不到、之後求職才用得到的
以下都是為有面試官的面試設計的,CPE 一項都用不上。放這裡是因為你之後大概率會用到 —— 先知道有這些東西存在就好,不要現在花時間。
| 它 | 怎麼用 |
|---|---|
| 錄自己解題 | 手機或電腦錄 30 分鐘,選一題出聲解,最後像家教一樣給自己打分:UMPIRE 六步有沒有跑完。剛開始覺得對電腦講話很蠢,練久了真的不緊張 |
| 找真人練 | 學長姐、同學、TA 都行;或用 Exponent 自動配對能力相近的人互當面試官(coding/behavioral/system design 都有) |
| 語言選擇 | 多數人刷 Python(語法簡潔、曲線平緩、內建函式多)。刷題用一種語言、做專案可以用另一種。目標明確(例如遊戲業)才考慮改刷 C++ —— 這點你已經在做了 |
| LeetCode Premium | 她買了(Black Friday 團購一年 $99),好處是公司 tag 題目與官方詳解。CPE 完全用不到 |
| 週賽 weekly contest | 她的判斷:想拿 offer 完全不必要。專心刷高頻題+模擬面試就好 |
最後那句留著。「正因為市場競爭,準備充分的人才會脫穎而出。刷題這段經驗會讓你更有分析力、更會解決問題 —— 這些能力會跟你一輩子。」你現在練的不只是那 3 題一星。
內容依據。 本頁整理自 Nollie Chen(AWS 總部 SWE)的「AI 時代刷題還有用?10 個月從零開始刷 LeetCode 到 AWS Offer」,適用情境是北美 SDE 面試。「CPE 版」欄位與各段的「對你的意義」是本站自行對應的翻譯,不是她說的;她的原話都放在左欄。另:3:7 這個比例她說有研究支持但未給出處,當經驗法則用即可;Q&A 談難度順序那段逐字稿前後矛盾,已捨棄不採。
解題反射 · 看到什麼 → 想到什麼
CPE 一星題比的是「反應速度」。把下面的「訊號 → 反射」練到看一眼就有直覺,考場就不卡。
① 最先看:輸入「怎麼結束」
拿到題目,第一件事不是想演算法,而是先決定怎麼讀輸入。看輸入說明的這幾個字:
| 看到這個 | 立刻反應(讀法) |
|---|---|
| 第一行是一個數字 T(測資組數) | n = int(input()) 再跑 n 次;或一次 sys.stdin.read().split() 慢慢取 |
| 沒說有幾筆、給到結束為止 / read until EOF | for line in sys.stdin:(讀到檔尾) |
| 「讀到 0 結束」「讀到 0 0 結束」「直到某特殊值」 | for line in sys.stdin: + 遇到那個值就 break(哨兵值) |
| 每組分成好幾行、數字散在多行 | 乾脆 sys.stdin.read().split() 一次全讀,用指標一個個拿,不管它換幾行 |
② 數據「範圍」的反射 ★ 你問的重點
| 看到這個 | 立刻反應 |
|---|---|
| 數字超大(2³²、10¹⁵、上千位、very large / big number) | Python 整數無上限,直接算就好!這是你選 Python 最爽的地方(C/C++ 要煩惱溢位或寫高精度,你不用) |
| N 很小(N ≤ 100、N < 500、Q < 21…) | 放心暴力:雙層迴圈 O(N²)、甚至 O(N³) 都跑得動,別想複雜解法 |
| 範圍超大、不可能一個個枚舉(如 D < 10¹⁵) | 不能暴力 → 改用公式 / 二分搜 / 數學推導(例:10170 旅館用二分搜) |
| 要判完全平方、開根號 | 用 math.isqrt,不要用 n ** 0.5(浮點誤差在大數會算錯) |
| 沒給明確上限 | 通常就是「讀到 EOF」,而且量可能大 → 用 sys.stdin 快讀,別用慢的 input() 迴圈 |
③ 輸出「格式」的反射(CPE 最常因這個 WA)
| 看到這個 | 立刻反應 |
|---|---|
| Case X: / Test #k: / Pair #k: / Field #k: | 要編號(從 1 開始);井號、冒號、空格全部照抄 |
| 「小數點後 N 位」 | print(f"{x:.4f}") 這類(把 4 換成題目要的位數) |
| 1 個 vs 多個用字不同(operation / operations) | 單數、複數分開處理(10035 就是這陷阱) |
| 多筆測資之間空一行 | 記得在組與組之間印空行(最後一組後面通常不用) |
| 固定句子(Jolly、impossible、… is prime.) | 大小寫、標點、句點一字不差 → 直接把題目的字串複製過來 |
④ 看到「關鍵字」→ 反射題型 / 工具
| 題目出現 | 反射 |
|---|---|
| 各位數字和、數根、被 9 / 11 整除 | 拆每一位數字(大數就當字串逐字元處理) |
| 進位制、base、二進位 / 十六進位 | bin(n)、int(s, base)、除基取餘 |
| 質數 / prime | 寫 is_prime(只試到 √n) |
| 最大公因數 / gcd / 互質 | from math import gcd |
| 排序、第 K 大、中位數、自訂順序 | sorted(..., key=...);中位數=排序後取中間 |
| 相鄰交換、最少交換次數 | 數逆序對(前面比後面大的配對數) |
| 格子、地圖、周圍 8 格、踩地雷 | 二維陣列 + 八方向 dx/dy,記得檢查邊界 |
| 機器人、骰子、依指令一步步、模擬 | 用變數記住目前狀態,照規則一步步更新 |
| 字元出現次數、頻率統計 | from collections import Counter |
| 字串替換、解碼、比對 | 逐字元掃描 + 建對照表 (dict) |
| 座標、距離、平行四邊形、角度 | 幾何公式 / 向量(如第四點 = A + C − B) |
| 星期幾、日期 | 算「一年的第幾天」再 % 7 |
⑤ 萬用三步驟(拿到任何題目,先這樣做)
⑥ 整份考卷的戰術(綜合考生心得)
| 拿到考卷 | 立刻反應 |
|---|---|
| 前 3 題幾乎就是那 3 題「一星」 | 一開始全力攻前三題,暴力法多半就能過(對應 ②「N 小就暴力」) |
| 後面 4~7 題 | 常還藏一題「水題」(送分) → 別卡在第 4 題硬幹,先把 7 題全掃一遍,挑最好做的先做 |
| 不知道從哪開始 | 每場通常至少一題來自這類一星題、甚至重複歷屆 —— 你練熟這 49 題的 CP 值就在這 |
| 時間快到、還差一題 | 考完立刻知道答對幾題;多 AC 一題就多拿一級,別提早放棄 |
怎麼練:之後每點開一題「看解法」,先別展開程式碼 —— 先用上面這套問自己「輸入怎麼讀?範圍給了什麼提示?是哪個題型?」,反射出方向後再點開對照解法。練幾天,看一眼題目就有感覺了。
內容依據。 ①~⑤ 的反射是我從這 49 題實際解題歸納 + 競賽程式通用直覺;⑥ 與部分實戰技巧參考考生分享並交叉比對。延伸閱讀:培哥的 CPE 筆記、從 1 題到 7 題心得、Dcard CPE 心得。
Python 起手式
一星題真正卡人的是「輸入怎麼讀」,不是邏輯。把這幾招背起來,下手就不卡。
三種輸入範本(背起來,大半題目都用得到)
① 讀到 EOF、逐行處理(最常用)
import sys
for line in sys.stdin:
line = line.strip()
if not line: continue
# 處理這一行
② 第一行是測資數 T
import sys
data = sys.stdin.read().split()
i = 0
T = int(data[i])
i += 1
for _ in range(T):
# 從 data[i] 取值,i += 1
③ 全部數字一次讀進來(量大最快)
import sys
nums = list(map(int,
sys.stdin.read().split()))
示範:把最簡單的 10055 完整跑一遍
題目:每行兩個數,輸出兩數差的絕對值,讀到 EOF。這就是「起手式 ①」+ 一行邏輯:
import sys
for line in sys.stdin:
line = line.strip()
if not line: continue
a, b = map(int, line.split()) # 切開、轉成兩個整數
print(abs(a - b)) # 差的絕對值,5 行可 AC
注意:題目數字可到 2³²,C/C++ 要用 long long,Python 完全不用管 —— 這就是你選 Python 的甜頭。
考場 3 鐵則
- 多筆測資讀到 EOF:用
for line in sys.stdin:,別用會卡住的input()迴圈。 - 輸出的空白、大小寫、每行結尾要跟題目一模一樣(差一個空白就 PE/WA)。
- 浮點輸出用 f-string 控制小數位,例如
print(f"{x:.2f}")。
考前衝刺
最後一週與考試當天的檢查清單。
考前衝刺包
免費的 49 題、詳解、讀書方法你都已經有了。這包是最後兩週的加速器 —— 把你自己標好的資料,變成考前一晚真正讀得完的一張清單。
- 個人化錯因小抄。把你「錯因筆記本」裡標的每一條,自動排成一張可列印的考前速記 —— 考前一晚只讀這張。
- 你的專屬衝刺題單。依你目前進度,自動挑出還沒熟練、CP 值最高的題,排成 7 天默寫計畫。
- 9 大題型「一次 AC」骨架速查。每型一頁,默寫前掃一眼再下手。
先卡位,暫不收費。考前衝刺包製作中,預計 2026/10/06 考試前一週開通;按「我有興趣」先登記,開放時我會在 Dcard 公告。免費的 49 題、詳解、讀書方法、13 週計畫、模測永遠免費、不會變動。
考前一週
- 到 CPE 官方歷屆 找 1–2 份,計時 3 小時只攻一星題,模擬真實節奏。
- 把「Python 起手式 ①」默寫到不用想就能打出來。
- 9 個題型,每型至少有 1 題能「蓋住默寫、一次 AC」。
- 確認你那一梯的考生使用手冊:Python 版本、交題流程、可否帶任何東西。
- 先到判題系統「瘋狂程設」跑一兩題,熟悉交題介面與流程(Python 也支援),別考場才在摸。
- 報名後別無故缺席(會取消下一次資格)、更別作弊(該次 0 分並取消之後三次資格)。
考試當天
- 先掃一遍 7 題,從最有把握的一星題下手,先拿下 Level 1 再說。
- 每題先確認輸入/輸出格式範例,再動手。
- 某題卡超過 15 分鐘 → 先跳下一題,最後再回頭。
- 送出前自己用題目的範例測一次,對得起來再交。
- 考場只能帶身分證明、筆、紙本注意事項、PC 編號紙條;手機、書、隨身碟等放書包。考完即時知道答對幾題。
記住:你只要對 1 題就達標了。把這 49 題的手感練出來,那「保證會出的一星題」就是你的分數。穩住,祝你上岸。
UVa 解題本
自己刷過、留下註解的 UVa 解答整理。點題目展開程式碼,一鍵複製去對照 / 默寫。
這裡是個人解題筆記,跟上面「題庫 · 49 題」是不同資料,互不影響。程式碼是本機刷題時寫的原始版本(含當時的思考註解),不是重新美化過的範例解。
備考模式
13 週作戰日曆 + 全真模測倒數計時,考試日:2026-10-06(二)。
13 階段作戰計畫
看的是順序不是日曆:「現在這裡」=第一個還沒打勾的階段。某週在忙別的事沒做,只是還停在原地,不會有東西被劃掉。日期是從考試日往回推的參考值,落後了可以按「以今天重排」把剩下的階段重新排起。
全真模測
3 小時倒數計時(重新整理頁面不會歸零)。目標:至少解出 3 題。
模測規則。 用 Python 3.9(沒有 match-case,只能用標準函式庫)、不用 AI、不查資料 —— 跟正式考場一樣的條件。