原创 【PAT-A1101】 Quick Sort(two pointers)

【分析】 這題其實也不難也可以算DP題,但就是要找清楚方法。開始的時候的想法是直接排序,然後選排序後位置沒變的元素,但是其實這是想當然了,排序後位置沒變的元素必然滿足題目條件,但是題目要求是原始序列滿足條件。 因此,這題還是要用別

原创 【PAT-A1103】Sum of Number Segments(DFS)

【分析】 這題類似於01揹包問題,我這裏用DFS的遞歸方法遍歷所有情況,並加上了剪枝。同時參考別人的方法,可以考慮用“打表”記錄各個數的p次方的表,這樣可以避免重複計算,降低複雜度,避免倒數第二個測試點超時。 【代碼】 #incl

原创 【PAT-A1102】Invert a Binary Tree(二叉樹的遍歷)

【分析】 這題就是簡單的二叉樹遍歷,invert的話,只要輸入的時候把左右孩子調換一下即可。 #include <cstdio> #include <algorithm> #include <queue> #include <ve

原创 【PAT-A1108】Finding Average(字符串處理)

【分析】 這題主要考察字符串的處理,主要學會用字符串string和其他基本數據類型的轉換函數比如stod,stoi (string頭文件)。以及判斷字符的函數isdigt() isalpha()(cctype) 這裏遇到一個注意

原创 【PAT-A1109】Group Photo

【題意】 N個人拍照的時候排陣形,共K排,前面每排N/K人,有多的都放最後一排。後排的人身高不能比前面的任意一個人矮,同時每排中間的人最高,兩邊身高依次下降。身高相同的按照名字的字典序排。給出每個人的姓名和身高,輸出最終排列的名字

原创 cin、cout關閉同步提高速度

cin的速度比scanf慢很多。 cin慢的原因主要在於默認cin與stdin總是保持同步, 這一步是消耗時間大戶. 只需要加上std::ios::sync_with_stdio(false)來關閉同步就好了, 速度甚至要優於sc

原创 【PAT-A1045】Favorite Color Stripe(LCS)

【分析】 這題是最長公共子序列問題(子序列不一定連續,而且允許公共部分有重複元素)給出的目標子序列每個元素是獨立的,沒有重複。但是從被匹配的總的序列中,子序列不一定連續,而且允許公共部分有重複元素。 比如總序列爲 {2 2 4 1

原创 【PAT-A1007】Maximum Subsequence Sum(DP)

【分析】 最長連續子序列和問題。經典問題。dp[i]代表以i號元素結尾的最長連續子序列和。 注意讀題,題目說明了全部元素爲負的處理方法。一定要認真讀完題目的每一個字並確保理解之後再開始解題,否則以爲節省了時間,反倒會因此浪費大量時

原创 【PAT-A1068】Find More Coins(DP)

【題意】 有N枚硬幣(可以有面值相同的),給出每枚硬幣的面值,然後要求用這些硬幣去支付價值M的物品,要求選出來支付的硬幣面值之和必須爲恰好等於M。要求按照遞增順序輸出選出硬幣的面值,如果答案不唯一,那麼輸出字典序最小的一組,如果無

原创 【PAT-A1081】Rational Sum(分數運算)

【題意】 就簡單的分數加法運算,之前做過一題更難的。不過這裏就是要注意輸入得到的值不標準,要reduction一下,而且明白了reduction中爲什麼在分數爲0的時候把分母設爲1,這是因爲0參與的加減法運算不會錯。 【代碼】 #

原创 【PAT-A1040】Longest Symmetric String(DP or string hash)

【分析】 最長迴文子串問題。有DP和字符串hash兩種方法。 字符串hash 先求出字符串hash數組H1[],再將字符串反轉,求出其字符串hash數組H2[]. 對迴文子串長度分奇偶討論: 奇數時,枚舉迴文子串中心點i,二

原创 【PAT-A1057】Stack(找第序列第K大,分塊法or樹狀數組+二分)

【題意】 給棧stack加一個除了push和pop外的操作peekMedian獲取中位數。 【分析】 值得注意的是,由於這裏是動態查詢,即在每次peekMedian之間序列可能會由於PUSH和POP操作變化,所以用簡單的排序後直接

原创 【PAT-A1080】Graduate Admission(排序)

【題意】 一個模仿考試排名和志願錄取的流程。 共N個考生,M所學校,每個考生有K個志願。先給考生按照平均成績排名,平均成績相同就按照筆試成績排名,還相同的話排名就一致。然後按照排名順序對每個考試進行錄取,每個學校都有錄取名額,依次

原创 【PAT-A1089】 Insert or Merge(排序算法)

【分析】 這個題目總體方法和前面的一題一樣,這裏主要分析merge排序。 這次我在做這題時採用的是遞歸的方法,但是發現我的遞歸算法結果正確,但是過程並未出現題目的中間結果。 當序列元素不等於二的冪次時,採用遞歸和非遞歸的兩種方法的

原创 【PAT-A1100】Mars Numbers(進制轉換)

【題意】 是一個10進制和13進制轉換的問題。 依次給出N(<100)個輸入,可能是10進制數,也可能是13進制的表示(取值爲[0, 169)也就是13進制最多兩位,但也可能爲1位) 0到12分別在13進制中對應 “tret, j