題目描述:
回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。
交換的定義是:交換兩個相鄰的字元
例如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...