資源限制
時間限制:1.0s 記憶體限制:512.0mb
問題描述
回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。
交換的定義是:交換兩個相鄰的字元
例如mamad
第一次交換 ad : mamda
第二次交換 md : madma
第三次交換 ma : madam (回文!完美!)
輸入格式
第一行是乙個整數n,表示接下來的字串的長度(n <= 8000)
第二行是乙個字串,長度為n.只包含小寫字母
輸出格式
如果可能,輸出最少的交換次數。
否則輸出impossible
樣例輸入
5mamad
樣例輸出
3思路:
從定義兩個變數i j,乙個從第乙個開始查詢,另乙個從最後乙個開始查詢,這樣的效率最高次數最少
定義乙個flag,初始化為0,定義乙個cnt用來儲存一共交換的次數,定義乙個k表示現還沒有對稱的最後乙個
當i=j的時候說明這個是是乙個單獨的數
如果是奇數,如果flag=0為了交換次數最少不要將這個單獨的數交換到最**去
(因為那樣以後增加的就會多)如果flag==1說明已經有了乙個單獨的數字了可以直接輸出"impossible"
如果是偶數直接輸出"impossible"
當i!=j時尋找到兩個一樣的字元,從j開始到最後乙個k(令j/*
基礎練習 完美的代價
思路: 從定義兩個變數i j,乙個從第乙個開始查詢,另乙個從最後乙個開始查詢,這樣的效率最高次數最少
定義乙個flag,初始化為0,定義乙個cnt用來儲存一共交換的次數,定義乙個k表示現還沒有對稱的最後乙個
當i==j的時候說明這個是是乙個單獨的數
如果是奇數,如果flag==0為了交換次數最少不要將這個單獨的數交換到最**去
(因為那樣以後增加的就會多)如果flag==1說明已經有了乙個單獨的數字了可以直接輸出"impossible"
如果是偶數直接輸出"impossible"
當i!=j時尋找到兩個一樣的字元,從j開始到最後乙個k(令j#include
#include
#include
#include
using
namespace std;
intmain()
flag =1;
cnt +
=(n /
2- i)
;//這個單獨的數不可能在 半數之後,因為一直在交換
break;}
else
if(s[i]
== s[j]
) k--
;break;}
}}cout << cnt;
return0;
}
藍橋杯 基礎練習 完美的代價
問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如m am ad mamad mama d第一次交換 adad ad mam d...
H 藍橋杯 基礎練習 完美的代價
題目描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md madma 第三次...
藍橋杯試題 基礎練習 完美的代價
試題 基礎練習 完美的代價 資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字...