藍橋杯 完美的代價

2021-10-03 18:03:28 字數 1477 閱讀 7598

本文參考:
問題描述

基礎練習 完美的代價

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

問題描述

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

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

例如mamad

第一次交換 ad : mamda

第二次交換 md : madma

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

輸入格式

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

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

輸出格式

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

否則輸出impossible

樣例輸入

5mamad

樣例輸出

3思路分析:

1.先判斷輸入的字串能否構成回文

2.若不能構成回文,則輸出;若能構成回文,則計算最少的交換次數。

具體過程

0123

456a

bbch

ca 0

1234

56ab

bchc

aabc

bhca

abch

bcaa

bchc

ba01

2345

6hba

bcca

0123456

hbab

ccah

bacb

cahb

accb

ahba

ccab

**實現

#include#includeusing namespace std;

void input();//輸入

bool judje_huiwen(char a);//判斷是否為回文

void judje();//判斷能否構成回文

void move();//計算移動的次數

int num[26]=;//總計字母出現的次數

char a[8000];//輸入字串的長度

int n;//輸入的長度

int main()

void input()

} bool judje_huiwen(char a)

if(strcmp(a,b)==0)

else

}void judje()

a[len-1]=a[i];

len--;//找到匹配一次,就從右往左移動一次

break;}}

if(i==j)

} }cout<}

藍橋杯 完美的代價

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

藍橋杯 完美的代價

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

藍橋杯 完美的代價

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