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


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

為什么要整理呢,因為我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類:

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

線性,算法時間復雜度為常數或線性的題,如字符串類;

理論,以理論為背景的題,如鏈表操作、判斷何種排序算法;

集合,以集合為主要工具的題;

樹,以樹為背景或主要工具的題;

圖,需要建立圖的題;

排序,純排序題;

散列,涉及到散列的題;

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

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

一些題目比較少的類別可能會並在一起講。此外,我發現有些知識點在這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++中各種“++”的部分。按使用率從高到低排序應該是類、運算符重載、模板、繼承。關於繼承我以后會單獨開一個專題系列。

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

 

文章鏈接(已完結):

線性

計算

排序

理論

雜項

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM