程序設(shè)計(jì)競賽專題挑戰(zhàn)教程
定 價(jià):85 元
- 作者:藍(lán)橋杯大賽組委會(huì)、羅勇軍、楊培林
- 出版時(shí)間:2022/12/1
- ISBN:9787115601506
- 出 版 社:人民郵電出版社
- 中圖法分類:TP311.1
- 頁碼:376
- 紙張:
- 版次:01
- 開本:16開
內(nèi)容提要
本書面向藍(lán)橋杯全國軟件和信息技術(shù)專業(yè)人才大賽的軟件類賽項(xiàng)(以下簡稱藍(lán)橋杯軟件類大賽),從數(shù)據(jù)結(jié)構(gòu)和算法的維度幫助廣大讀者訓(xùn)練編程思維和計(jì)算思維,掌握編程方法和解題技巧。
本書共10章,第1章主要介紹了藍(lán)橋杯軟件類大賽的基本情況,歸類匯總了其涉及的知識(shí)點(diǎn)(包括算法知識(shí)點(diǎn)),詳細(xì)介紹了其在線評(píng)測系統(tǒng)以說明評(píng)分情況。第2~10章則由淺入深、由易到難地介紹了各類知識(shí)點(diǎn),包括手算題和雜題、基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)、基本算法、搜索、高級(jí)數(shù)據(jù)結(jié)構(gòu)、動(dòng)態(tài)規(guī)劃、數(shù)學(xué)、字符串、圖論等,對(duì)于每一類知識(shí)點(diǎn)都簡明扼要地進(jìn)行說明,并以真題作為例題進(jìn)行細(xì)致講解,以更好地幫助讀者實(shí)現(xiàn)學(xué)用結(jié)合的學(xué)習(xí)效果。需要特別說明的是,本書例題的代碼部分,分別由C++、Python、Java三種語言來實(shí)現(xiàn)(書中僅提供以C++、Python語言編寫的代碼,以Java語言編寫的代碼可從本書的配套數(shù)字資源中獲。
本書不僅適合作為藍(lán)橋杯軟件類大賽參賽者的備賽用書,還適用于備賽其他編程或算法類大賽(如全國青少年信息學(xué)奧林匹克競賽NOI、國際大學(xué)生程序設(shè)計(jì)競賽ICPC、中國大學(xué)生程序設(shè)計(jì)競賽CCPC、中國高校計(jì)算機(jī)大賽?團(tuán)體程序設(shè)計(jì)天梯賽GPLT等)。此外,本書還可作為本科生和研究生的相關(guān)算法課程的教材或參考資料。
1.藍(lán)橋杯官方備賽指南,讓你實(shí)現(xiàn)精準(zhǔn)備賽,有效刷題
2.覆蓋算法競賽考點(diǎn),解析詳細(xì)又貼心
3.例題代碼用 C++、Python 兩種語言編寫,同時(shí)附帶Java語言源代碼的電子資源
4.體驗(yàn)“在線評(píng)測系統(tǒng)”+“真題庫”,提前進(jìn)“賽場”
5.配套資源豐富,提供配套源代碼和PPT
6.金牌”教練+“金牌”教研強(qiáng)強(qiáng)聯(lián)手,多年實(shí)戰(zhàn)經(jīng)驗(yàn)總結(jié),讓你備賽不再困惑,學(xué)有所獲
羅勇軍
上海交通大學(xué)計(jì)算機(jī)系博士畢業(yè),現(xiàn)為華東理工大學(xué)計(jì)算機(jī)系教師。擔(dān)任華東理工大學(xué)程序設(shè)計(jì)競賽主教練 16 年,指導(dǎo)學(xué)生參加國際大學(xué)生程序設(shè)計(jì)競賽 ICPC、中國大學(xué)生程序設(shè)計(jì)競賽 CCPC、藍(lán)橋杯大賽,成績優(yōu)異,曾兩次帶隊(duì)參加 ICPC 全球總決賽。每年指導(dǎo)數(shù)百名學(xué)生參加藍(lán)橋杯大賽。
楊培林
高級(jí)工程師,國信藍(lán)橋教育科技股份有限公司教學(xué)總監(jiān),曾擔(dān)任多所大學(xué)算法團(tuán)隊(duì)教練,參與多所大學(xué)的教學(xué)方案制訂,線上課程的研發(fā)設(shè)計(jì)與教學(xué)工作。通過 10 多年以來的孜孜追求和學(xué)習(xí),形成了自己獨(dú)特的教育教學(xué)方式。對(duì)技術(shù)的學(xué)習(xí)和跟進(jìn)一直沒有停歇,在教育教學(xué)活動(dòng)中把學(xué)習(xí)的方法、技巧、經(jīng)驗(yàn)和知識(shí)傳授給學(xué)生,讓自己和學(xué)生共享學(xué)習(xí)的快樂,共同收獲學(xué)習(xí)的成果。
目 錄
第 1章 藍(lán)橋杯軟件類大賽介紹 1
1.1 藍(lán)橋杯軟件類大賽的競賽規(guī)則 1
1.2 競賽題示例 4
1.3 算法知識(shí)點(diǎn)總覽 5
1.4 歷年真題知識(shí)點(diǎn)統(tǒng)計(jì) 7
1.5 藍(lán)橋杯軟件類大賽的評(píng)測系統(tǒng) 9
小結(jié) 12
第 2章 手算題和雜題 13
2.1 手算題攻略 13
2.1.1 巧用編輯器 13
2.1.2 眼看手?jǐn)?shù) 14
2.1.3 巧用Excel 16
2.1.4 巧用Python 17
2.2 雜題 22
小結(jié) 32
第3章 基礎(chǔ)數(shù)據(jù)結(jié)構(gòu) 33
3.1 數(shù)組 33
3.2 鏈表 37
3.2.1 C++鏈表實(shí)現(xiàn) 38
3.2.2 Python鏈表實(shí)現(xiàn) 42
3.3 隊(duì)列 44
3.3.1 C++普通隊(duì)列 44
3.3.2 Python普通隊(duì)列 47
3.3.3 C++優(yōu)先隊(duì)列 49
3.3.4 Python優(yōu)先隊(duì)列 51
3.4 !51
3.4.1 C++棧的實(shí)現(xiàn) 52
3.4.2 Python棧的實(shí)現(xiàn) 55
3.4.3 例題 57
3.5 二叉樹 59
3.5.1 二叉樹的定義 60
3.5.2 二叉樹的存儲(chǔ) 60
3.5.3 二叉樹的遍歷 61
3.5.4 例題 63
小結(jié) 66
第4章 基本算法 67
4.1 算法復(fù)雜度 67
4.1.1 算法的概念 67
4.1.2 計(jì)算資源 68
4.1.3 選擇解題方法 69
4.1.4 算法復(fù)雜度概述 71
4.2 排序 73
4.2.1 C++的sort()函數(shù) 73
4.2.2 Python的sort()和sorted()函數(shù) 74
4.2.3 Java的sort()函數(shù) 75
4.2.4 例題 75
4.3 排列和組合 87
4.3.1 C++的全排列函數(shù)next_permutation() 88
4.3.2 Python的排列函數(shù)permutations() 89
4.3.3 Python的組合函數(shù)combinations() 89
4.3.4 手寫排列和組合代碼 90
4.3.5 例題 92
4.4 尺取法 97
4.4.1 尺取法的概念 97
4.4.2 反向掃描 98
4.4.3 同向掃描 99
4.5 二分法 102
4.5.1 二分法的概念 102
4.5.2 整數(shù)二分 103
4.5.3 整數(shù)二分例題 104
4.5.4 實(shí)數(shù)二分 112
4.6 倍增法和ST算法 114
4.6.1 用暴力法解決區(qū)間問題 115
4.6.2 ST算法 116
4.6.3 ST算法的模板代碼 118
4.7 前綴和 119
4.8 貪心算法 124
小結(jié) 132
第5章 搜索 133
5.1 DFS基礎(chǔ) 134
5.1.1 遞歸和記憶化搜索 134
5.1.2 DFS的代碼框架 136
5.1.3 DFS的所有路徑 137
5.1.4 DFS與排列組合 140
5.1.5 DFS應(yīng)用詳解 143
5.1.6 DFS真題 147
5.2 BFS基礎(chǔ) 152
5.2.1 BFS的原理 152
5.2.2 BFS與最短路徑 154
5.3 連通性判斷 158
5.3.1 DFS連通性判斷 159
5.3.2 BFS連通性判斷 161
5.3.3 連通性例題 163
5.4 BFS與判重 168
5.5 雙向廣搜 171
5.6 剪枝 174
小結(jié) 182
第6章 高級(jí)數(shù)據(jù)結(jié)構(gòu) 183
6.1 并查集 183
6.1.1 用并查集檢查連通性 183
6.1.2 并查集的基本操作 185
6.1.3 路徑壓縮 188
6.1.4 例題 189
6.2 樹狀數(shù)組 197
6.2.1 區(qū)間和問題 197
6.2.2 樹狀數(shù)組的原理 199
6.2.3 lowbit() 201
6.2.4 樹狀數(shù)組的代碼 202
6.2.5 逆序?qū)栴} 203
6.3 線段樹 207
6.3.1 線段樹的概念 208
6.3.2 區(qū)間查詢 209
6.3.3 區(qū)間查詢例題 214
6.3.4 區(qū)間修改和懶惰標(biāo)記 221
小結(jié) 226
第7章 動(dòng)態(tài)規(guī)劃 227
7.1 動(dòng)態(tài)規(guī)劃的概念 227
7.2 動(dòng)態(tài)規(guī)劃基礎(chǔ) 228
7.3 線性DP 235
7.4 狀態(tài)壓縮DP 247
7.4.1 狀態(tài)壓縮DP的概念 247
7.4.2 狀態(tài)壓縮DP的原理 249
7.4.3 位運(yùn)算 249
7.4.4 例題 250
7.5 樹形DP 255
7.6 數(shù)位DP 259
小結(jié) 264
第8章 數(shù)學(xué) 265
8.1 模運(yùn)算 265
8.2 快速冪 266
8.3 矩陣乘法 271
8.4 矩陣快速冪 273
8.5 GCD和LCM 278
8.5.1 GCD的定義和性質(zhì) 278
8.5.2 GCD的編程實(shí)現(xiàn) 278
8.5.3 LCM 279
8.5.4 例題 280
8.6 素?cái)?shù) 286
8.6.1 素?cái)?shù)的判斷 287
8.6.2 素?cái)?shù)的篩選 290
8.6.3 區(qū)間素?cái)?shù) 294
8.6.4 分解質(zhì)因子 295
8.7 組合數(shù)學(xué) 297
8.7.1 基本計(jì)數(shù) 297
8.7.2 鴿巢原理 301
8.7.3 二項(xiàng)式定理和楊輝三角 302
8.8 幾何 304
8.8.1 普通幾何題 305
8.8.2 點(diǎn)和向量 306
8.8.3 點(diǎn)積和叉積 307
8.8.4 點(diǎn)和線的關(guān)系 310
小結(jié) 314
第9章 字符串 316
9.1 字符串函數(shù) 316
9.1.1 C++的字符串函數(shù) 316
9.1.2 Python的字符串處理 317
9.1.3 Java的字符串函數(shù) 318
9.2 簡單字符串例題 319
9.3 樸素模式匹配算法 325
9.4 KMP算法 326
9.4.1 模式串P的特征與匹配的關(guān)系 327
9.4.2 最長公共前后綴和Next[]數(shù)組 328
9.4.3 例題 329
小結(jié) 335
第 10章 圖論 336
10.1 圖的基本概念 336
10.2 圖的存儲(chǔ) 337
10.3 拓?fù)渑判颉?38
10.4 Floyd算法 342
10.4.1 Floyd算法思想 342
10.4.2 例題 344
10.5 Dijkstra算法 347
10.5.1 Dijkstra算法思想 348
10.5.2 編程實(shí)現(xiàn)Dijkstra算法 349
10.5.3 例題 350
10.6 Bellman-Ford算法 352
10.7 SPFA 355
10.7.1 SPFA原理 355
10.7.2 SPFA的模板代碼 356
10.8 最小生成樹 358
10.8.1 Prim算法 358
10.8.2 Kruskal算法 360
小結(jié) 363