PAT 2019 9月8號總結

2021-09-26 23:47:15 字數 898 閱讀 6233

第一題:

乙個整數a,所有位加起來為m,a+1的所有位數加起來為n,m和n的最大公約數為大於2的質數,則a稱為永遠數。

給出m個查詢,每個查詢給出k(a的位數)和 m(a的位數和),找出可能的a,以及對應的n。

採用dfs和回溯剪枝。每一層dfs確定以為,當遍歷深度為k的時候,結束,判定該數字是否為永遠數。

每一位可能取的值為0——9,深度為0,也就是第一層,數字不能為0。

剪枝,每一層可以取0——9,但是保證剩餘的的位數的位數字之和不能大於9*(k-depth)。即還剩下k-depth位數字沒有確定,但是前面確定的數字之和,用總和減去後剩下的以經大於每一位是9的情況,也就是說,剩餘的k-depth每一位都是9,最後的總和也是小於m的,這種情況就不往下dfs了,直接剪掉。(這會少掉數量級的情況)

第二題:

兩個序列,按照長的為2 短的 1的順序輸出一次輸出。

常規鏈的處理。先用unordered_map存所以結點。再從兩個序列的起點遍歷得到兩條鏈。確定那一條是長鏈。長鏈從前往後遍歷。短鏈從後往前遍歷。加入最後一條總鏈。如果某一條鏈沒了。就跳出。把兩條鏈剩下的結點加入總鏈。最後遍歷輸出總鏈,除了最後乙個結點,i結點的位址輸出i+1結點的位址。

第三題:

靜態樹輸出字尾表示式。將每個結點存起來。並且把每個結點的左右孩子記錄。沒有的那個就是根結點。

找到根結點後後序遍歷。如果左右子樹都有,就「(」 + 左子樹 + 右子樹 + 根節點 + ")"遍歷。如果左子樹沒有;

就「(」 + 根結點 + 右子樹 + ")"遍歷。最後輸出字串。

第四題:

dijkstra。判斷每個序列時候為dijkstra.

按照dijkstra 遍歷。看每次對應的序列上的點,在這一倫中是否是d[u]最小的點。若不是,就結束遍歷,輸出false。若n個結點訪問結束。輸出true。

2019 9月 月末總結

第一次寫月末總結,有點小激動。現在是波蘭時間9月29晚上十一點,北京時間的話已經進入9月的最後一天了,來波蘭的第乙個月,除了適應生活,交交朋友,大部分還是花在了學技術上面,而這技術又主要集中在了node上面,而node又主要集中在了koa和ts上面。node.js基本順了一遍。js也是,包括es20...

個人總結8月18號

時間過得真是太快了,距離開學只有不到兩個星期的時間了。馬上就要開始大三生活了,還是多多少少有點不適應,感覺自己彷彿還是剛剛步入大學的校門。昨天晚上我們開展了頭腦風暴的活動,不過我們的點子總是來的快去的也快,總是被我們自我否定了。到最後討論去 玩的時候,是我們討論的最為激烈的時候,最後決定了下個星期天...

PAT 甲級 2023年9月8號 題解

第一題 dfs 剪枝 k位數不能所有的數字都遍歷一遍,必須有選擇的。選擇k位數和為m的。remain為剩下未分配數的位置的和。remain必須小於等於剩下的位數 9。因為若是大於的話,剩下的所有位數都為9,都滿足不了所有位加起來為m。比如k 3,m 20,如果第一位為1,則return。因為無論後面...