PAT甲級題分類彙編——序言

今天開個坑,分類整理PAT甲級題目(https://pintia.cn/problem-sets/994805342720868352/problems/type/7)中1051~1100部分。語言是modern C++。html

爲何要整理呢,由於我2019年9月要考PAT甲級,雖然是第一次考,雖然只學了數據結構(https://mooc.study.163.com/course/1000033001?tid=2402970002#/info),但我要衝着高分(2019年9月8日更新:滿分)去。算法

 

下面的表格簡述了這50道題的大意,並進行了分類。數組

題號 標題 分數 大意 類型
1051 Pop Sequence 25 判斷一個序列是不是pop序列 理論
1052 Linked List Sorting 25 鏈表排序 理論
1053 Path of Equal Weight 30 尋找樹中必定權重的路徑
1054 The Dominant Color 20 尋找出現最多的數 線性
1055 The World's Richest 25 限定範圍排序結果 排序
1056 Mice and Rice 25 分組排序 排序
1057 Stack 30 一個有中位數功能的stack 理論
1058 A+B in Hogwarts 20 特殊進制加法 計算
1059 Prime Factors 25 分解素因數 計算
1060 Are They Equal 25 必定精度下兩數是否相等 計算
1061 Dating 20 尋找字符串中相同字符 線性
1062 Talent and Virtue 25 必定規則的排序 排序
1063 Set Similarity 25 集合類似度 集合
1064 Complete Binary Search Tree 30 徹底二叉搜索樹
1065 A+B and C (64bit) 20 大數加法與比較 計算
1066 Root of AVL Tree 25 AVL樹的根
1067 Sort with Swap(0, i) 25 經過與0號元素交換來排序 數學
1068 Find More Coins 30 子集和問題 算法
1069 The Black Hole of Numbers 20 黑洞數 計算
1070 Mooncake 25 揹包問題 算法
1071 Speech Patterns 25 尋找出現最多的單詞 線性
1072 Gas Station 30 最短距離最大,距離不超限
1073 Scientific Notation 20 科學計數法還原 計算
1074 Reversing Linked List 25 分段逆轉鏈表 理論
1075 PAT Judge 25 複雜排序 排序
1076 Forwards on Weibo 30 必定層數的轉發計數
1077 Kuchiguse 20 字符串共同後綴 線性
1078 Hashing 25 散列 散列
1079 Total Sales of Supply Chain 25 計算供應鏈總銷售額
1080 Graduate Admission 30 志願與錄取 排序
1081 Rational Sum 20 有理數加法 計算
1082 Read Number in Chinese 25 中文讀數 線性
1083 List Grades 25 限定範圍排序結果 排序
1084 Broken Keyboard 20 比較兩序列的差別 線性
1085 Perfect Sequence 25 符合約束的最大數列長度 集合
1086 Tree Traversals Again 25 中序遍歷逆推
1087 All Roads Lead to Rome 30 複雜權重的最短路徑問題
1088 Rational Arithmetic 20 有理數運算 計算
1089 Insert or Merge 25 判斷插入排序或歸併排序 理論
1090 Highest Price in Supply Chain 25 供應鏈最高價格
1091 Acute Stroke 30 超過閾值的空間體積之和
1092 To Buy or Not to Buy 20 判斷子集 集合
1093 Count PAT's 25 數子串 數學
1094 The Largest Generation 25 樹中元素最多的層
1095 Cars on Campus 30 模擬車輛進出 線性
1096 Consecutive Factors 20 最長連續因數 計算
1097 Deduplication on a Linked List 25 鏈表去重 理論
1098 Insertion or Heap Sort 25 判斷插入排序或堆排序 理論
1099 Build A Binary Search Tree 30 創建二叉搜索樹
1100 Mars Numbers 20 進制轉換 計算

一共分了10類:安全

計算,一些純數學計算的題,如進制轉換;數據結構

線性,算法時間複雜度爲常數或線性的題,如字符串類;工具

理論,以理論爲背景的題,如鏈表操做、判斷何種排序算法;性能

集合,以集合爲主要工具的題;ui

樹,以樹爲背景或主要工具的題;編碼

圖,須要創建圖的題;spa

排序,純排序題;

散列,涉及到散列的題;

數學,須要組合數學知識的題;

算法,用到算法設計課程中強調的算法的題,如貪心算法。

一些題目比較少的類別可能會並在一塊兒講。此外,我發現有些知識點在這50道題裏面沒有出現過(目前發現,我只粗略地看過一遍),可能會有一篇文章來補充。

每種類型的題目我會總結共性,簡述可能的變形,最後挑一兩道較難的放上代碼。

 

最後說一下筆者的編碼習慣。

喜歡C++11,幾乎沒有一道題個人代碼是能夠在C++98/03的標準下經過的。有時候我會忘記一個特性是否是來自C++14/17,可是我保證此係列中全部代碼均可以在PAT OJ的g++編譯器中經過編譯並AC。

喜歡換行。左右大括號都獨佔一行,沒有大括號的if、while、for等block會換行並縮進。

喜歡用 std::vector ,幾乎不會根據輸入上限創建數組。這是由於我是玩單片機的,沒那麼多內存能夠浪費。 std::vector 在初始化時肯定好大小或用 reserve(...) 分配好空間後效率仍是能夠的。

喜歡用 std::cin 和 std::cout 作輸入輸出,由於我沒參加過計算機競賽,沒遇到過嚴格的時間限制。既然C++提供了類型安全的輸入輸出方式,那就用。

喜歡用C++中各類「++」的部分。按使用率從高到低排序應該是類、運算符重載、模板、繼承。關於繼承我之後會單獨開一個專題系列。

我自認爲個人代碼是現代的、優雅的。若是你有辦法讓個人代碼更優雅,歡迎評論。這種優雅確實會帶來必定的代碼膨脹與性能損失,若是你受不了,能夠去參考別人的代碼。

 

文章連接(已完結):

線性

計算

排序

理論

雜項

相關文章
相關標籤/搜索