藍橋杯 Basic19 完美的代價

2021-09-29 01:56:03 字數 1038 閱讀 4605

問題描述

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

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

例如mamad

第一次交換 ad : mamda

第二次交換 md : madma

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

輸入格式

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

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

輸出格式

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

否則輸出impossible

樣例輸入

5mamad

#思路:

以左面一半的字元為基礎,1)從左面第乙個字元開始,從最右邊的字元開始找第乙個與 之匹配的字元,並將其移到與左面第乙個字元對稱的位置(即最右面)

2)從左面第二個字元開始,從右邊倒數第二個的字元開始找第乙個與 之匹配的字元 重複步驟1)

3)重複上述步驟直到左右相遇

原理:(為什麼是次數最少的)對於字元a和b,無論先移動哪乙個到對稱位置,總的次數 不變

#include

#include

#define maxsize 8005

void

swap

(char

*a,char

*b)//自定義交換函式

intmain()

break;}

}if(i==a&&num%2==

0)else

if(i==a&&num%2==

1&&site==-1

)else

if(i==a&&num%2==

1&&site!=-1

) a++

;b--;}

printf

("%d"

,result)

;return0;

}

藍橋杯BASIC 19 完美的代價

csdn富文字編輯器測試,這樣子似乎沒有markdown好看欸 資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回...

藍橋Basic19完美的代價

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

藍橋杯 BASIC 19 基礎練習 完美的代價

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