就是貪心,但是不知道證明是怎樣的,雙指標,乙個在左端點,乙個在右端點,如果相等,就左右往中間靠攏,如果不相等,就從右指標去往前遍歷,如果遇到相等的,就用氣泡排序方法,放到與左指標對稱的地方,如果沒有,就嘗試把s[l],也就是左指標指向的值放在字串的中間,每乙個字串只能放一次,如果出現了多次,就輸出impossible即可。
#include
#include
#include
using
namespace std;
char s[
9000];
int sum;
void
solve
(int begin,
int end)
s[end]
=tmp;
}int
main()
if(k<=l&&flag<2)
if(k>l)
if(k<=l&&flag>=2)
}else}if
(succ)cout << sum;
else cout <<
"impossible"
;}
基礎練習 完美的代價
問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md madma 第三次...
基礎練習 完美的代價
問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md madma 第三次...
基礎練習 完美的代價
回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md madma 第三次交換 ma...