藍橋杯 完美的代價(貪心演算法)

2021-09-11 21:52:22 字數 1081 閱讀 5132

基礎練習 完美的代價

時間限制:1.0s   記憶體限制:512.0mb

問題描述

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

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

例如mamad

第一次交換 ad : mamda

第二次交換 md : madma

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

輸入格式

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

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

輸出格式

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

否則輸出impossible

樣例輸入5

mamad

樣例輸出

思路:左側第i個字元對應右側n-i-1個字元,如果str[i] != str[n-i-1],就分別計算從i開始向右尋找到等於str[n-i-1]所花費的步數和從n-i-1開始向左尋找等於str[i]所花費的步數,採取較小步數的方案,迴圈下去,直到i等於中間字元。

#include #include #include using namespace std;

const int maxn = 8001;

const int inf = int_max;

int main()

if(judge)

step +=stepl;

}else

step+=stepr;}}

} cout<}

藍橋杯 完美的代價 貪心

問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md madma 第三次...

藍橋杯 完美的代價

藍橋杯 完美的代價 問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md...

藍橋杯 完美的代價

回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md madma 第三次交換 ma...