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 起手式」,下手就不卡了。

0/49 熟練
已熟練 0
練習中 0
未開始 49

選一個題型開始

不必照順序 —— 從你最有把握的題型先拿下,建立手感。點卡片直接進入該題型的練習。

考前衝刺包 · 早鳥預購 —— 把你標好的錯因與進度,變成考前一晚讀得完的一張清單。
看看內容 →

關於這個網站

這是一個為了準備 CPE(大學程式能力檢定)而做的個人學習輔助站:把歷年「一顆星」常考的 49 題依題型整理,附上題目、思路與可執行的 Python 解法,幫你穩拿 Level 1、進攻 Level 2–3。

  • 免責聲明:站內題目敘述是自行整理的摘要、解法為學習參考用;實際題目、測資與考試規定一律以 官方網站與原題為準,不保證完全無誤。本站為非官方網站,與 CPE 主辦單位無關。
  • 你的進度:預設只存在你自己的瀏覽器(localStorage);只有在你主動「建立同步碼」後,才會把進度上傳雲端,用來讓手機/電腦同步。也可用頁尾的「匯出/匯入備份」手動搬移。
  • 致謝與來源:49 題是 CPE 廣為流傳的「一星必考」題庫;題目與判題來自 UVa Online JudgeZeroJudge;考試技巧參考多位考生的公開分享。每題解法都在本機用官方範例測過。
  • 著作權與聯絡:題目著作權屬原作者/UVa Online Judge;本站僅提供自行整理的摘要與原創解法供學習之用。若你是內容權利人,或對任何內容有疑慮,歡迎來信告知,我會儘速處理或移除:(電子郵件載入中…)

歡迎自由分享給需要的同學,祝大家都順利通過 CPE。

CPE 考試資訊 & 合格標準

先搞懂遊戲規則,目標才會清楚 —— 知道「對幾題=什麼等級」,再開始練最有效率。

免費
大專在學生(含研究生)報考
每年約 4 梯
3 / 5 / 10 / 12 月(二)·多校多考場
3 小時 · 7 題
現場上機、電腦自動判題
4 種語言
C / C++ / Java / Python 皆可

這是什麼考試

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 初級Beginner1 題具簡單程式編寫能力 ← 你的最低目標
B 中級Intermediate2 題能用程式處理簡單問題(常見畢業門檻)
A- 進階級Advanced3 題能用程式解決一般常見問題 ← 你的進攻目標
A 專業級Professional4~5 題熟悉基礎演算法與資料結構
A+ 專家級Expert6 題以上熟悉各種進階演算法與資料結構
F 零級Zero0 題

所以你的策略很合理。 把這 49 題(全是一星 ★)練熟 → 考場那 3 題一星至少吃下 1~3 題 → 穩拿 C 初級 ~ A- 進階級。先求對 1 題(C 初級),有餘力再往上。各校畢業門檻不同(常見「一次過 2 題」或「累計過 3 題」),實際以你自己學校規定為準

題庫 · 9 大題型 · 49 題

每題附 ZeroJudge 連結(可交 Python)與思路提示。練到能「蓋住範例、自己默打一次就 AC」就標「已熟練」。

錯因筆記本 · 0 則

你標成「練習中/已熟練」的題目,可以在每張卡片寫下這次 WA 的原因(輸入沒讀到 EOF、輸出多換行、邊界沒處理…)。這裡幫你收成一張清單 —— 考前一天回來只讀這頁,把自己一犯再犯的錯補起來。

讀書方法

為什麼「默寫」比「死背」有效 —— 給「會寫但常卡住」的你。

CPE 一星題會「換數字、換包裝」,背字元沒用,要背「套路」。把每一題練到能「蓋住範例、自己重打一遍並 AC」,這同時就在訓練你的邏輯。每題都照下面四步跑一輪:

1
讀懂題目
點「去做題」看原題,特別盯死 輸入/輸出格式(一星題最常死在格式,不是邏輯)。
2
理解範例
看一份正解,逐行問自己「這行在幹嘛」。卡住就回來看卡片上的思路提示。
3
蓋住默寫
關掉範例,自己重打、送出,直到 AC。錯了先看判題回饋(WA/PE/TLE)對症下藥。
4
標記+複習
AC 了標「練習中」;隔 2~3 天再默寫一次,還能一次過就標「已熟練」。

6 週衝刺排程(每天 2 題就好,重質不重量)

WEEK 1-2

題型 1·2·3
公式 / 進位 / 整除 —— 最簡單、CP 值最高,先建立信心。

WEEK 3

題型 4·5
字串 / 字元頻率統計。

WEEK 4

題型 6·7
排序 / 模擬 —— 考場最常出,重點練。

WEEK 5

題型 8·9 + 弱項
幾何 / 雜項 + 全部默寫第二輪。

WEEK 6

限時模擬
找一份歷屆,計時 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 不但用得到,還更該用。第 ⑧ 段是「現在用不到、之後求職才用」的,先收著就好。

3 : 7
看教學 vs 自己動手的比例
(經驗法則,非實證數據)
5 分鐘
想不出來就看解答,別硬耗
2–3 輪
同一批題重刷次數,每輪隔 2–4 週
50 → 80
前 50 題迷茫是正常的,開竅在後面

① AI 時代,為什麼反而更要自己刷

她給了三個理由,講的其實是同一件事:AI 讓「會寫 code」變便宜,所以「證明你自己會寫」變貴。

殘酷真相實際發生什麼
公司知道你會用 AIMeta / 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。 (她說這個比例有研究支持,但影片沒給出處 —— 當經驗法則用就好,別拿它當實證數據去說服誰。方向是對的:多數人卡在「看太多、做太少」。)

對你的翻譯。你語法已經會了,所以 3:7 對你的意思是:看解法的時間,不該超過蓋住默寫的時間。這正是讀書方法那四步的第 2、3 步 —— 看範例是「3」,蓋住重打到 AC 才是「7」。停在第 2 步不動,就是她卡一個月的那個坑。

③ 她的四樣資源,哪些 CPE 用得到

資源它給你什麼對 CPE
Grind 75
Cheatsheet
依重要度排序資料結構、每種的優缺點分析、時間複雜度表、對應練習題。專為面試設計,不會學到用不到的東西用得到。那張「資料結構優先順序表」直接拿來排你的讀書順序
NeetCode 150Blind 75 的加強版,涵蓋大公司高頻題。每題有影片+圖解+動畫,從暴力解一路講到最佳解部分。題目跟 CPE 一星題重疊不多,但「暴力解 → 最佳解」的講法正是該偷的思考路徑
山景城一姐中文、有 coding 背景,複雜概念講得特別有邏輯。NeetCode 講太快聽不懂時的備援用得到。概念卡住時的中文救援
手寫筆記研究證實手寫幫助學習。記:資料結構視覺化、演算法執行步驟、解題框架、為什麼第一次會錯、corner case、常用模板最用得到。CPE 考場發紙筆 —— 在紙上想事情是你考場真的會做的動作,現在就該練

打字太快,會讓你以為自己懂了;手寫會逼你一步一步想,然後你會發現漏掉一堆。她用 iPad + GoodNotes,Notability、OneNote 也一樣,挑順手的就好。

④ 卡住時的 5 分鐘規則

她刷 NeetCode 的實際流程 —— 這一段可以整套搬到這站的 49 題上:

1
想 5 分鐘。想不出來就直接看解答(討論區或影片),不要硬耗。初期你是在學別人的思考方式,不是在考自己。
2
看完關掉,自己重寫一次。
3
寫不出來就回去補洞 —— 補的是那個「不會的觀念」,不是那題的答案。
4
隔幾天再寫一次,確認是真懂,不是短期記憶。

對照一下:這跟站上讀書方法的「讀懂 → 默寫 → 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 格的地雷數)。六步全部在你按下第一個鍵之前就該做完四步。

U
盤問題目,不要急著想演算法。三件事按順序問自己:
輸入怎麼結束?→「讀到 0 0 結束」=哨兵值,不是給 T、也不是 EOF(解題反射①)。
輸出長什麼樣?→ 每組前面要印 Field #k:冒號要有、k 從 1 開始,而且組與組之間空一行、最後一組後面不空
自己造 case:全部是雷的盤面?完全沒有雷?只有 1×1 一格?—— 面試是講給人聽,這裡是寫在紙上等等要拿來驗
M
對到題型,而且不要只想到一種解法。「格子」+「周圍 8 格」→ 二維陣列+八方向 dx/dy=解題反射④、題型 7。
但這一步的價值在於多想一個:其實也可以反過來做 —— 不掃格子數雷,而是每顆雷去給周圍 8 格各 +1。兩種都是 O(n·m),選前者的理由是邊界檢查只集中在一個地方,比較不會漏。能講出「為什麼選這個」,才是 M;只喊出「八方向」不是。
P
在紙上寫完這 6 行,再碰鍵盤。考場發紙筆,這步不花你三分鐘:
while True:
    讀 n, m;若是 0 0 就 break
    讀 n 行盤面,直接存字串陣列
    對每一格:
        是 '*'  -> 原樣放回
        不是    -> 數周圍 8 格的 '*',放數字
    印 Field #k: 再印盤面(第 2 組起,前面先補一個空行)
跳過這步的代價:打到一半才發現組間空行的規則沒想清楚,然後回頭改輸出邏輯 —— 那是最貴的一種錯。
I
照著紙上的打,兩個實作決定先想好。
① 盤面直接存字串不用轉 list,grid[i][j] 就能取單一字元。
② 八方向用 for di in (-1,0,1) 巢狀 for dj in (-1,0,1)、跳過 (0,0),比手寫 8 組座標短,而且不會漏掉其中一格。完整程式碼在題庫該題的「看解法」裡。
R
送出前 dry run,而且專盯角落。這題會 WA 的兩個地方都不是主邏輯:
邊界:挑一個角落的非雷格手算一次 —— 它的鄰居只有 3 格,不是 8 格。確認 0 <= ni < n and 0 <= nj < m 真的擋住了越界。
組間空行:只有一組時,後面不該多一個空行;兩組時中間剛好一行。用 U 階段造的 case 各跑一次。
CPE 可以本機跑,但「範例過了」只證明 happy path。角落跟空行都不在範例裡。
E
確認不會 TLE,然後就交。每格看 8 個鄰居 → O(n·m·8)=O(n·m),這題的 n、m 都很小,暴力就是正解解題反射② 的「N 小就暴力」)。
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,答案都長一樣,非常容易露餡。

她給的兩個時機,共同點是都在「事後」

1
U 階段不知道該問什麼 → 讓 AI 生一份澄清問題清單,學它的思路,下次看到類似題自己就會問了。
CPE 版:讓 AI 幫你列「這題我該先確認哪些輸入輸出細節」,練久了就內化成反射。
2
自己寫完、debug 完之後 → 讓 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 EOFfor 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)、除基取餘
質數 / primeis_prime(只試到 √n)
最大公因數 / gcd / 互質from math import gcd
排序、第 K 大、中位數、自訂順序sorted(..., key=...);中位數=排序後取中間
相鄰交換、最少交換次數逆序對(前面比後面大的配對數)
格子、地圖、周圍 8 格、踩地雷二維陣列 + 八方向 dx/dy,記得檢查邊界
機器人、骰子、依指令一步步、模擬用變數記住目前狀態,照規則一步步更新
字元出現次數、頻率統計from collections import Counter
字串替換、解碼、比對逐字元掃描 + 建對照表 (dict)
座標、距離、平行四邊形、角度幾何公式 / 向量(如第四點 = A + C − B)
星期幾、日期算「一年的第幾天」再 % 7

⑤ 萬用三步驟(拿到任何題目,先這樣做)

1
先讀範例 + 看輸入怎麼結束 → 用 ① 決定讀法(T / EOF / 哨兵)。
2
想清楚每筆要算什麼 → 用 ④ 把它對到一個題型與工具。
3
輸出嚴格照題目格式 → 用 ③ 檢查編號、空格、大小寫、小數位、空行。

⑥ 整份考卷的戰術(綜合考生心得)

拿到考卷立刻反應
前 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 longPython 完全不用管 —— 這就是你選 Python 的甜頭。

考場 3 鐵則

  • 多筆測資讀到 EOF:用 for line in sys.stdin:,別用會卡住的 input() 迴圈。
  • 輸出的空白、大小寫、每行結尾要跟題目一模一樣(差一個空白就 PE/WA)。
  • 浮點輸出用 f-string 控制小數位,例如 print(f"{x:.2f}")

考前衝刺

最後一週與考試當天的檢查清單。

加值方案 · 早鳥預購

考前衝刺包

免費的 49 題、詳解、讀書方法你都已經有了。這包是最後兩週的加速器 —— 把你自己標好的資料,變成考前一晚真正讀得完的一張清單。

  • 個人化錯因小抄。把你「錯因筆記本」裡標的每一條,自動排成一張可列印的考前速記 —— 考前一晚只讀這張。
  • 你的專屬衝刺題單。依你目前進度,自動挑出還沒熟練、CP 值最高的題,排成 7 天默寫計畫。
  • 9 大題型「一次 AC」骨架速查。每型一頁,默寫前掃一眼再下手。
NT$99 早鳥
開賣後 NT$199
已記下你的興趣 —— 開放付款時我會在 Dcard 公告。謝謝!

先卡位,暫不收費。考前衝刺包製作中,預計 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不查資料 —— 跟正式考場一樣的條件。

考前衝刺包 · 站長看板

只有你看得到(網址加 ?stats=1)。數字來自 KV,跨所有訪客累計。

捲到方案的人
按「我有興趣」
點「前往付款」
成功解鎖(已付款)
關閉看板