備戰藍橋杯 貪心演算法刷題整理2

2021-10-09 03:36:57 字數 1578 閱讀 8072

題目描述:

回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。

交換的定義是:交換兩個相鄰的字元

例如mamad

第一次交換 ad : mamda

第二次交換 md : madma

第三次交換 ma : madam (回文!完美!)

輸入格式

第一行是乙個整數n,表示接下來的字串的長度(n <= 8000)

第二行是乙個字串,長度為n.只包含小寫字母

輸出格式

如果可能,輸出最少的交換次數。

否則輸出impossible

思路:

1.impossible的情況:如果n為偶數,則不能有不成對的數字出現,還有就是如果n為奇數,則不能有兩個不成對的數字出現

2.大體思路,用乙個二重迴圈來進行對比,由字串第乙個字元(一重迴圈來表示)和最後乙個字元(二重迴圈來表示)進行對比開始,第乙個字元在一次迴圈中保持不變,最後乙個字元如果與它不同,則跳到倒數第二個字元…倒數第三…以此類推進行比較。當找到與第乙個字元對應的元素時,將該元素一步一步移到最後乙個字元的位置。第乙個字元比較完畢,再以第二個字元為基準,從倒數第二個的位置上開始,倒著進行比較…以此類推

不過有些地方要注意,奇數的情況下,先把所有的成對的數的位置交換好,最後再將那個不成對的放在中間,舉個例子:dmmaa

如果先將d移至中間,則:

如果最後將d移至中間,則:

#include

"iostream"

#include

"algorithm"

using

namespace std;

intmain()

count =1;

cnt +

=(n/

2- i);}

else

if(s[i]

== s[j]

)

end--

;break;}

}}cout << cnt;

return0;

}

再分享一些小知識,#include「cmath」檔案頭中一些常用的函式:pow(x,y) 求x的y次方,若y=1/2…1/3…則對應x的平方根…立方根…

sqrt(x) 求x的平方根 ,注意上述兩個函式返回值都是double型別的

ceil(x) 向上捨入,最接近的整數

floor(x) 向下捨入,最接近的整數

round(x) 對浮點數四捨五入

整理的不對的,不全的,希望大家不吝賜教,抱拳了!

好看的皮囊千篇一律,有趣的靈魂萬里挑一;若不是被生活、情懷、使命所迫,誰願意把自己搞的那麼才華橫溢

備戰藍橋杯 貪心演算法刷題整理4

題目描述 乙個旅行家想駕駛汽車以最少的費用從乙個城市到另乙個城市 假設出發時油箱是空的 給定兩個城市之間的距離d1 汽車油箱的容量c 以公升為單位 每公升汽油能行駛的距離d2 出發點每公升汽油 p和沿途油站數n n可以為零 油站i離出發點的距離di 每公升汽油 pi i 1,2,n 計算結果四捨五入...

貪心演算法 藍橋杯

在mars星球上,每個mars人都隨身佩帶著一串能量項鍊。在項鍊上有 n顆能量珠。能量珠是一顆有頭標記與尾標記的珠子,這些標記對應著某個正整數。並且,對於相鄰的兩顆珠子,前一顆珠子的尾標記一定等於後一顆珠子的頭標 記。因為只有這樣,通過吸盤 吸盤是mars人吸收能量的一種器官 的作用,這兩顆珠子才能...

貪心演算法刷題

牛牛有乙個陣列array,牛牛可以每次選擇乙個連續的區間,讓區間的數都加1,他想知道把這個陣列變為嚴格單調遞增,最少需要操作多少次?嚴格遞增,我們應該讓某個數字後面的乙個比他小的連續區間都進行加1操作,然後遍歷整個陣列 除最後乙個數字 其實我們不需要真正的對陣列進行加1操作,只需要求出ai與ai 1...