【qbxt!】提高基礎導學案
7.15準備去qbxt提高基礎班被吊打了
一、 基礎算法(枚舉、模擬、貪心、分治)
【簡介】
枚舉、模擬、貪心、分治是最基礎也是最需要打好基礎的幾個算法,這些題目普遍分布在 NOIP 的前兩題,代碼難度較低,學好這些算法不但是拿到 NOIP 保底分的保障,同時也能夠幫助你更好的分析部分綜合題。
不能因為這一塊的相對簡單而忽視了他們的重要性,相反的,選手的目標並不局限於掌握算法與會做題目上,更要同時借這個機會提升自己的思考問題的速度、對題目的敏感程度、寫代碼的速度、調試程序的能力等多維代碼能力,為以後的學習打下牢固的基礎。
【學習要點】
- 對於枚舉和模擬,一定要多寫多練,鍛煉自己寫代碼的速度和正確性,保證用最快的時間完成正確的代碼。
- 貪心題要靠一定題量的積累,選手通過掌握一些貪心的定式達到舉一反三的效
果。
- 需要掌握基本分治思想、同時準備自己的二分和三分模板,做到寫二分這種題時形成一種套路和定式,減少自己的出錯概率。
- 養成一個良好的讀題習慣,題目中的每句話都可能十分關鍵,尤其是題目結尾樣例數據和數據範圍約定以及可能存在的註釋部分,更是尤為重要。
- 養成一個良好的代碼習慣,首先確認算法的正確性,再理清楚代碼的邏輯結構,最後再寫代碼,急於動手一般會導致你浪費更多的時間在寫代碼中途的迷茫和寫完後永無止境的調試中。
【學習難點】
- 模擬題的難度一般集中在如何理解題意上,所以要培養自己對題目的閱讀能力,對樣例數據的分析能力,做到看見長題目心裏不慌,寫長代碼思維邏輯強不混亂。
- 貪心題的難點在於貪心算法本身的正確性,即大膽猜想,小心求證,在尋找規律時一定要足夠大膽,但是找到的規律本身一定要符合邏輯,在面對自己提出的算法時,應從兩個角度去考慮:i) 嘗試為自己的算法找一個合邏輯的解釋;ii) 反復尋找可能存在的反例去反向驗證。而掌握大量的套路,可以快速看出題目的套路來源,就能很快找到一個合理邏輯。
- 對分治題的要求體現在兩點:i) 能正確的寫出分治代碼,對分治算法的框架有一個清晰的掌握並有一個的漂亮實現;ii) 分治題一般都有很明顯的特征,通過題目的積累能慢慢對分治的題型有個大致了解,在遇到新的分治題的時候能迅速意識到此題的算法應該是一個分治,幫助你有一個正確的思考導向,題目就已經完成了一半(在二分題上尤為明顯)
【例題】
- 蛇形矩陣(CODEVS 1160)
- 均分紙牌(2002 年 NOIP 提高組)(CODEVS 1098)
- 線段覆蓋(CODEVS 1214)
- 國王遊戲(2013 年 NOIP 提高組)
- 跳石頭(2015 年 NOIP 提高組)
一、 基礎算法(枚舉、模擬、貪心、分治)
【簡介】
枚舉、模擬、貪心、分治是最基礎也是最需要打好基礎的幾個算法,這些題目普遍分布在 NOIP 的前兩題,代碼難度較低,學好這些算法不但是拿到 NOIP 保底分的保障,同時也能夠幫助你更好的分析部分綜合題。
不能因為這一塊的相對簡單而忽視了他們的重要性,相反的,選手的目標並不局限於掌握算法與會做題目上,更要同時借這個機會提升自己的思考問題的速度、對題目的敏感程度、寫代碼的速度、調試程序的能力等多維代碼能力,為以後的學習打下牢固的基礎。
【學習要點】
- 對於枚舉和模擬,一定要多寫多練,鍛煉自己寫代碼的速度和正確性,保證用最快的時間完成正確的代碼。
- 貪心題要靠一定題量的積累,選手通過掌握一些貪心的定式達到舉一反三的效
果。
- 需要掌握基本分治思想、同時準備自己的二分和三分模板,做到寫二分這種題時形成一種套路和定式,減少自己的出錯概率。
- 養成一個良好的讀題習慣,題目中的每句話都可能十分關鍵,尤其是題目結尾樣例數據和數據範圍約定以及可能存在的註釋部分,更是尤為重要。
- 養成一個良好的代碼習慣,首先確認算法的正確性,再理清楚代碼的邏輯結構,最後再寫代碼,急於動手一般會導致你浪費更多的時間在寫代碼中途的迷茫和寫完後永無止境的調試中。
【學習難點】
- 模擬題的難度一般集中在如何理解題意上,所以要培養自己對題目的閱讀能力,對樣例數據的分析能力,做到看見長題目心裏不慌,寫長代碼思維邏輯強不混亂。
- 貪心題的難點在於貪心算法本身的正確性,即大膽猜想,小心求證,在尋找規律時一定要足夠大膽,但是找到的規律本身一定要符合邏輯,在面對自己提出的算法時,應從兩個角度去考慮:i) 嘗試為自己的算法找一個合邏輯的解釋;ii) 反復尋找可能存在的反例去反向驗證。而掌握大量的套路,可以快速看出題目的套路來源,就能很快找到一個合理邏輯。
- 對分治題的要求體現在兩點:i) 能正確的寫出分治代碼,對分治算法的框架有一個清晰的掌握並有一個的漂亮實現;ii) 分治題一般都有很明顯的特征,通過題目的積累能慢慢對分治的題型有個大致了解,在遇到新的分治題的時候能迅速意識到此題的算法應該是一個分治,幫助你有一個正確的思考導向,題目就已經完成了一半(在二分題上尤為明顯)
【例題】
- 蛇形矩陣(CODEVS 1160)
- 均分紙牌(2002 年 NOIP 提高組)(CODEVS 1098)
- 線段覆蓋(CODEVS 1214)
- 國王遊戲(2013 年 NOIP 提高組)
- 跳石頭(2015 年 NOIP 提高組)
-
數學題的知識點分布很細很“雜”。除了上面整理的大塊、成系統的的知識點以外,還有很多各式的小結論需要在平時學習的過程中去學習和記憶。但和單純的數學不同的是,NOIP中的數學並不是非常在意結論的正確性,而更在意如何去使用一個結論。就像做數學題時,並不關心數學公式如何被證明,更關心一個正確的數學公式如何通過正確的變形去解題。所以可以不去死磕一個結論的正確性證明。
【知識點清單】
- 高精度
- 排列組合數,進制轉換,Lucas 定理
- 容斥原理
- gcd 算法、exgcd 算法以及裴蜀定理
- 逆元、解同余方程組(中國剩余定理)
- 線性篩求素數
- 歐拉函數、歐拉定理、費馬小定理、線性篩求歐拉函數
- 卡塔蘭數、斯特林數
【學習重點】
- 通過題目去不斷學習以上各種算法的變形與實際運用。
- 掌握每個定理的性質,便於在做題的時候通過聯想得到解。
- 準備屬於自己的數論模板(尤其是高精度和 exgcd),將每個數論算法都熟背。
- 註意 long long 和取模的問題。
- 高精度除法(取模)的正確實現,高精度壓位操作的實現。
- 組合數的各種計算方式(楊輝三角,Lucas 定理,以及計算 n!的逆元)
- 如何利用中國剩余定理解決模數不是素數時的同余方程?
【例題】
- 大質數 2(CODEVS 1675)
- 基因變異(CODEVS 3194)
- 同余方程(NOIP2012 提高組)(CODEVS 1200)
- 小凱的疑惑(NOIP2017 提高組)
- 青蛙的約會(POJ1061)
- 禮物(CODEVS 1321)
- 愚蠢的組合數(CODEVS 1504)
- 麥森數(CODEVS 1087)
- 統計公共子序列個數(CODEVS 1778)
四、 字符串算法
【簡介】
字符串算法主要針對 NOIP 中可能出現的字符串題,而字符串題在 NOIP 中算是一塊獨立的大題,這類題的特點就是沒有掌握對應的字符串算法,雖然能完全理解題目的意思,但依舊寸步難行,完全沒有任何思路。字符串的每一個算法幾乎都是高度凝練的智慧結晶,十分值得我們去理解,當然從解題的角度去看,我們依舊需要背誦所有的字符串算法代碼,畢竟很難僅通過自己的理解去重現這些算法。【知識點一覽】
- KMP(字符串匹配)
- TRIE(字典樹)
- HASH
【重難點一覽】
- 最最基本的,找到適合自己的字符串讀入輸出處理方式。
- 難點集中在對 KMP 整個算法的理解上,KMP 算法有很多巧妙的應用,所以不能只是單純去背誦其代碼,要對整個算法有清晰的理解,以及了解對 next 數組的多角度解釋。
- 一定要掌握 HASH 算法,有很多字符串的題目都能用字符串 HASH 解決,學會在題目中積累 HASH 的經驗,背誦一個 HASH 模板,以及學會雙 HASH 值、HASH 掛鏈等最基本的技巧。
【例題】
- Poj 3080 Blue Jeans
- Poj 2406 Power Strings
- Poj 2752 Seek the Name, Seek the Frame
- Poj 1743 Musical Theme
- Hdu 4821 String
- NOI2014 動物園
五、 圖論(圖、樹)
【簡介】
這一章主要介紹一些進階的圖論算法,而每個圖論算法都是一類圖論題的核心,這就要求選手掌握每一個圖論算法的實現。同時,由於圖論題的靈活性,經常會對算法進行一定程度的變形和利用,這就要求選手對每個圖論算法的思路有著清晰的掌握。
大體上 NOIP 的圖論題目多可以分為三類:
- 考察圖論算法本身性質的(如利用三角形不等式的差分約束,負權回路,最小長度環等)
- 難點集中在如何對原圖進行轉化的,或如何建模形成一個圖
- 綜合題,圖論算法和其他算法的結合,圖論算法只是為了更好的引出其他
算法
【知識點一覽】
- 圖的基本存儲
- 最小生成樹
- 最短路算法
- 有向圖的拓撲排序
- 樹上倍增
【難點一覽】
- dijkstra 的堆優化,SPFA 的 SLF 優化
- 差分約束問題
- 如何改進最短路算法來得到一個次短路算法
- 如何求一個次小生成樹
- 如何利用 Floyd 算法求一個最小長度環
- 如何利用 SPFA 判定一個負環
【例題】
- CODEVS 1231 最優布線問題
- Car 的旅行線路(NOIP2001)(CODEVS 1041)
- BZOJ 1977 次小生成樹
- Poj 1201 Intervals
- Poj 3621 Sightseeing Cows
- 最最基本的,找到適合自己的字符串讀入輸出處理方式。
- 難點集中在對 KMP 整個算法的理解上,KMP 算法有很多巧妙的應用,所以不能只是單純去背誦其代碼,要對整個算法有清晰的理解,以及了解對 next 數組的多角度解釋。
- 一定要掌握 HASH 算法,有很多字符串的題目都能用字符串 HASH 解決,學會在題目中積累 HASH 的經驗,背誦一個 HASH 模板,以及學會雙 HASH 值、HASH 掛鏈等最基本的技巧。
【例題】
- Poj 3080 Blue Jeans
- Poj 2406 Power Strings
- Poj 2752 Seek the Name, Seek the Frame
- Poj 1743 Musical Theme
- Hdu 4821 String
- NOI2014 動物園
五、 圖論(圖、樹)
【簡介】
這一章主要介紹一些進階的圖論算法,而每個圖論算法都是一類圖論題的核心,這就要求選手掌握每一個圖論算法的實現。同時,由於圖論題的靈活性,經常會對算法進行一定程度的變形和利用,這就要求選手對每個圖論算法的思路有著清晰的掌握。
大體上 NOIP 的圖論題目多可以分為三類:
- 考察圖論算法本身性質的(如利用三角形不等式的差分約束,負權回路,最小長度環等)
- 難點集中在如何對原圖進行轉化的,或如何建模形成一個圖
- 綜合題,圖論算法和其他算法的結合,圖論算法只是為了更好的引出其他
算法
【知識點一覽】
- 圖的基本存儲
- 最小生成樹
- 最短路算法
- 有向圖的拓撲排序
- 樹上倍增
【難點一覽】
- dijkstra 的堆優化,SPFA 的 SLF 優化
- 差分約束問題
- 如何改進最短路算法來得到一個次短路算法
- 如何求一個次小生成樹
- 如何利用 Floyd 算法求一個最小長度環
- 如何利用 SPFA 判定一個負環
【例題】
- CODEVS 1231 最優布線問題
- Car 的旅行線路(NOIP2001)(CODEVS 1041)
- BZOJ 1977 次小生成樹
- Poj 1201 Intervals
- Poj 3621 Sightseeing Cows
- 了解二叉搜索樹和平衡樹有助於理解 set 和 map
- 了解位運算有助於理解 bitset
【基本知識點清單】
- stack——<stack>
- queue、priority_queue——<queue>
- deque——<deque>
- map——<map>
- set——<set>
- bitset——<bitset>
- <algorithm>
【qbxt!】提高基礎導學案