第一題:
乙個整數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。因為無論後面...