時間軸:
- 2017年,數據結構加入了我的課程清單。
- 2018年12月,我從網易雲課堂下載了數據結構的所有課程視頻(學校里沒有網,只能離線看),開始一刷。一刷只看了視頻,基本沒有做題,看到AVL樹的時候已經懵了,后來不了了之。
- 2019年7月,我開始二刷數據結構。事實證明不寫代碼一刷是沒有用的,到后面完全不記得以前看過。這次我跟着進度來,每個算法都造輪子,每道題都做。我開始上PAT平台刷題,DSA題集的數據結構部分刷完以后,就開始刷甲級題,覺得難度適中,決定參加PAT甲級考試。
- 2019年8月,我開始寫PAT甲級分類匯編,分類整理了1051~1100的題目。做題的同時,也逐漸理解了PAT出題的思路。
- 2019年9月8日,我到上海大學計算中心參加PAT甲級考試。13:30開考,15:30滿分交卷。我,PAT甲級,退役。
感想:
- 這次考試不難,各種模擬題也不難。說到底,PAT甲級就是不難。多做題,邊界情況就自然會處理了;多造輪子,熟悉算法,每種算法都把寫法固定下來,萬一出了問題自己也看得清楚;善用C++,把標准庫容器都玩懂,尤其是std::vector和std::map,很多本來要自己實現的算法就可以交給標准庫了。
- 在刷題的時候參考過一些別人的代碼,大多都是C++寫的。然而,很多人表面上用着C++,實際上干的卻是C的事情——只用到了C++眾多特性中C的那一部分,唯一用到C++的就是std::vector、std::map、std::sort等常見容器與算法。C++是(最)適合描述數據結構的語言(之一),這話沒錯,但C++遠不止數據結構。C++提供了namespace,有些人卻要using namespace std;(參見這個問題);C++提供了lambda表達式,就算不用,也有std::greater,有些人卻要自己寫謂詞函數;你要是說C++11是新標准,兼容性不好,明年C++20標准就要發布了,你卻還在用C++98?我們既然選擇了C++作為一個工具,就有義務好好利用它。
- 上海大學的開發環境真的差。Dev-C++好像是4.9.9.2版本,沒有代碼提示,甚至沒有括號補全,每個字符都純手打。GCC還在用3.1.1,我想寫個-std=c++11都不行。講真,用慣auto后再也不會寫std::vector<int>::iterator了。不知道為什么PAT會選上海大學作為考點,我以后也不想再去了。
- 我對自己的C++挺自信的,在於我會的語言工具已經足夠。然而,與競賽深挖算法不同,我的學習路線很長時間以來都是以編程語言為主的,而數據結構與算法是薄弱的。這段時間的刷題,以及這一次考試的結果,彌補了這一空缺。
展望:
- 數據結構是不夠的,做題的時候就有體會。新版考綱出來之前的題,有些就不會做,比如動態規划等,需要學習算法課程才行。同時,甲級考完該考頂級了。
- NOIP沒了,實際上是改名了。我從小不學習信息競賽,離NOIP最近的一次是上物理課的時候幾個同學要去考NOIP。如果要NOIP走下去的話,高三已經晚了,但我還是想參加一下。提高組的難度是高於甲級的,算法肯定是要學的;賽制也很不一樣,需要時間去適應。
- 現在我編程語言OK了,算法也完成一半了,計算機組成結構等課程也要相應跟上。這些都是要花時間的。