題目描述
回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。
現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。
交換的定義是:交換兩個相鄰的字元
例如mamad
第一次交換 ad : mamda
第二次交換 md : madma
第三次交換 ma : madam (回文!完美!)
輸入格式
第一行是乙個整數n,表示接下來的字串的長度(n <= 8000)
第二行是乙個字串,長度為n.只包含小寫字母
輸出格式
如果可能,輸出最少的交換次數。
否則輸出impossible
樣例
樣例輸入
5
mamad
樣例輸出
3
題目分析
這題本質上是貪心演算法,思路可能有些繞,,我照著網上**打的,,看了半天才看明白,,自己照著思路又打了一遍,加了點自己理解的注釋。反正大致思路是這樣的:首先遍歷每乙個數,找到它對應的相等的數,如果存在相等的,則一步一步換到相應的位置。如果找不到它對應的數且如果輸入的n是偶數,則直接退出程式,如果輸入的n是奇數,則這樣找不到對應數的數字只能存在乙個。
#include
#include
using
namespace std;
intmain()
flag=
true
;//即使是奇數,也只能有乙個單數的
sub+
=n/2
-i;//認為把單個的移動到中間
}else
if(a[i]
==a[k]
) j--
;//開始尋找下乙個數,並且結束此次
break;}
}}cout
}
藍橋杯 基礎練習 完美的代價
問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如m am ad mamad mama d第一次交換 adad ad mam d...
藍橋杯 基礎練習 完美的代價
資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交...
藍橋杯試題 基礎練習 完美的代價
試題 基礎練習 完美的代價 資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字...