第十一屆藍橋杯python組第二場省賽 排序

2021-10-22 12:48:02 字數 1072 閱讀 4157

1. 問題描述:

小藍最近學習了一些排序演算法,其中氣泡排序讓他印象深刻。 在氣泡排序中,每次只能交換相鄰的兩個元素。小藍發現,如果對乙個字串中的字元排序,只允許交換相鄰的兩個字元, 則在所有可能的排序方案中,氣泡排序的總交換次數是最少的。例如,對於字串 lan 排序,只需要 1 次交換。對於字串 qiao 排序, 總共需要 4 次交換。小藍找到了很多字串試圖排序,他恰巧碰到乙個字串,需要 100 次交換,可是他忘了吧這個字串記下來,現在找不到了。請幫助小藍找乙個只包含小寫英文本母且沒有字母重複出現的字串,對該串的字元排序,正好需要 100 次交換。如果可能找到多個,請告訴小藍最短的那個。如果最短的仍然有多個,請告訴小藍字典序最小的那個。請注意字串中不可以包含相同的字元。

【答案提交】

這是一道結果填空的題,你只需要算出結果後提交即可。本題的結果為乙個只包含小寫英文本母的字串,在提交答案時只填寫這個字串,填寫多餘的內容將無法得分。

2. 思路分析:

因為是需要盡可能使用較短長度的字串來構成100次的相鄰字元的交換,並且要求字典序是最小的而且只能交換相鄰的字母,所以我們需要使用盡可能使用排列在前面的字元,並且使用逆序排列,考慮完全逆序的情況這樣才可以使得字串的交換次數盡可能多也就是字串最短,那麼需要長度為15的完全逆序的字串,因為完全逆序交換的次數為:(1 + 2 + ... 14) * 14 = 105,所以剩下的我們就需要在完全逆序的字串:"onmlkjihgfedcba"進行調整使其構成能夠使用100次的相鄰字母的字串,105次只比100次多了5次,所以我們需要將其中多餘的5次消除掉,分析字串的特點可以知道後面字典序較大的字元往前調整,位於其前面的字串的相對位置是不變的,所以我們需要在逆序的"onmlkjihgfedcba"字串第6個字母放到最前面,這樣當排列好了"abcdefghi"之後j就位於其後面,這樣字母j這個位置是不用調整的,所以恰好消除了多餘的5次,最後交換的次數為 14 + 13 + ... + 6 + 4 + 3 + 2 + 1 = 100次。所以結果為:jonmlkihgfedcba。主要還是找出其中的規律,先考慮極端的情況再進行調整

第十一屆藍橋杯

問題描述 小藍要為一條街的住戶製作門牌號。這條街一共有 2020 位住戶,門牌號從 1 到 2020 編號。小藍製作門牌的方法是先製作 0 到 9 這幾個數字字元,最後根據需要將字 符貼上到門牌上,例如門牌 1017 需要依次貼上字元 1 0 1 7,即需要 1 個 字元 0,2 個字元 1,1 個...

第十一屆藍橋杯 矩陣

問題描述 把 1 2020 放在 2 1010 的矩陣裡。要求同一行中右邊的比左邊大,同一列中下邊的比上邊的大。一共有多少種方案?答案很大,你只需要給出方案數除以 2020 的餘數即可。答案提交 這是一道結果填空題,你只需要算出結果後提交即可。本題的結果為乙個整數,在提交答案時只填寫這個整數,填寫多...

第十一屆藍橋杯 走方格

問題描述 在平面上有一些二維的點陣。這些點的編號就像二維陣列的編號一樣。從上到下依次為第 1 至第 n 行,從左到右依次為第 1 至第 m 列,每乙個點可以用行號和列號來表示。現在有個人站在第 1 行第 1 列,要走到第 n 行第 m 列。只能向右或者向下走。注意,如果行號和列號都是偶數,不能走入這...