關於 APCS 準備

目錄

這篇文章是我自己的經驗,只是某天剛好有人問,就把回答記錄一下~
這裡可以聯繫到我:

  • Discord: temmieowo
  • Email: kapoo950807@gmail.com

觀念題

語法

變數

要理解 C 語言中視域的概念,在不同函數使用變數會存取到誰。此外還有函數 pass by reference、pass by value 的概念。

for 迴圈

  1. 了解使用 <<= 的差別,以及多層迴圈中,變數彼此是怎麼影響的,這可能要多作題觀念才能起來。
  2. 記得 for 迴圈的處理順序如下:
for ([1] 初始設定 ; [2] 如果這裡成立就到 [3],否則到 [5] ; [4] 結束狀態,執行後到 [2]){ [3] 每次迴圈要做的事情 continue; // 到步驟 [4] break; // 到步驟 [5] } [5] 結束迴圈

函式

函式如同函數的概念,也就是 「同個參數、同個輸出」 這代表題目中的東西若重複用到多個相同參數的函數,你應該要用「記憶化」,也就是把函數的計算結果存起來,要用的時候直接用(例子:阿克曼函數 ,試著手算 A(3, 4)

少見語法

  • switch 陳述句
  • 連續使用比較運算子 a<b<c
  • 整數除法向 0 取整(小數點取整是直接將小數部分移除)

演算法

搜尋演算法

  • 二分搜(找到的元素在哪個位置、要找幾次等等)

排序演算法

  • 氣泡排序(極為重要)
  • 氣泡排序的交換次數
  • 插入排序
  • 合併排序

更多的進階演算法

這邊可以和實作題一起練,因為多數這種題目只要看出是什麼演算法,基本上可以秒解(例子:LCS)。

其餘有的沒的

最重要的還是數學邏輯要好,筆者第一次考就四級分了(現在也還是四級分)。

實作題

如果你還沒達到三級分

「請先不要學任何演算法」,因為第二題根本只是最基礎的實作題、幾乎沒有任何演算法,無法答對這題代表實作能力還不行。
請先去讀 AP123、練好基本語法能力再看下一步

如果你達到三級分

演算法建議可以從下面的順序開始學,AP325 是不錯的選擇

  1. 枚舉
  2. STL
  3. 二分搜、雙指針、滑動窗口
  4. 貪心
  5. 動態規劃
  6. 圖論

實作題學習資源

無敵推薦、一定要先去看!
三級分以前:看 0~15 章
三級分以後:看 16~26 章

有許多講義都沒有提及的技巧,值得一看。

板中的舊講義,不算完整,但可以翻翻看,或許會找到一些有趣的東西。

相當完整的講義,適合 APCS 3~5 級分的人。

有很多超出 APCS 範圍的內容。
相當完整、難度很廣,建議四級分以上再來看看有沒有自己缺的知識。

(需要登入並註冊課程後才能看到)提供很多進階的資結、演算法介紹,以及有裸題可以練。
若是針對 APCS、請只看 Binary SearchTwo Pointers MethodDisjoint Sets Union,有能力的話可以再看 Segment Tree, part 1

根據 2023 年 IOI 國手所述,他最推薦先刷滿的 Judge。後者是我滿喜歡的原文書,可以搭配 CSES 一起寫的,他們的主題是類似的。

美國 IOI 國手寫的,循序漸進,搭配 CSES 一起看還不錯。

中國的競程網站,用來探索不同演算法非常有趣。