基礎練習 完美的代價

2021-10-03 18:26:29 字數 592 閱讀 5552

就是貪心,但是不知道證明是怎樣的,雙指標,乙個在左端點,乙個在右端點,如果相等,就左右往中間靠攏,如果不相等,就從右指標去往前遍歷,如果遇到相等的,就用氣泡排序方法,放到與左指標對稱的地方,如果沒有,就嘗試把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...