藍橋杯 完美的代價 貪心

2021-09-11 04:06:17 字數 1069 閱讀 3621

問題描述

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

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

例如mamad

第一次交換 ad : mamda

第二次交換 md : madma

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

輸入格式

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

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

輸出格式

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

否則輸出impossible

樣例輸入5

mamad

樣例輸出

解題思路

假如字串所含字元個數為奇數,則有且只有一種字元的個數為奇數;為偶數則不能存在出現次數為奇數的字元。

調整交換:

從最左邊到n/2列舉每個字元,從要處理的字串的最右邊開始往左找,找到相同的字元則交換到對應的位置,同時+交換次數。

如果找不到,則這個字元為處在字串(奇數)最中間位置的字元,需要先假想不存在這個字元,當其他所有字元調整完之後再把它移到中間,+交換次數。

ac**

#include using namespace std;

void swap(char &t1,char &t2)

int main()

else

break;

}if(ch[i] == ch[j])

}if(flag1)

break;

}if(!flag1)

cout << ans << endl;}/*

9ffdejjell

14*/

藍橋杯 完美的代價

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

藍橋杯 完美的代價

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

藍橋杯 完美的代價

本文參考 問題描述 基礎練習 完美的代價 時間限制 1.0s 記憶體限制 512.0mb 問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰...