基礎練習 完美的代價
時間限制:1.0s 記憶體限制:512.0mb
錦囊1
使用貪心演算法。
錦囊2
從左到右列舉每個字元,移動對應字元。個數為單的字元放中間。
問題描述
回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。
交換的定義是:交換兩個相鄰的字元
例如mamad
第一次交換 ad : mamda
第二次交換 md : madma
第三次交換 ma : madam (回文!完美!)
輸入格式
第一行是乙個整數n,表示接下來的字串的長度(n <= 8000)
第二行是乙個字串,長度為n.只包含小寫字母
輸出格式
如果可能,輸出最少的交換次數。
否則輸出impossible
樣例輸入 5
mamad
樣例輸出 3
1/*2完美的代價:通過交換相鄰字元,使原字串化為回文字串 。 3*/
4 #include5 #include6
intmain()
21 c=1;//
n為奇數,將第乙個單個的字元a[i]移到中間位置所需的交換次數
22 sum=sum+n/2-i;
23break;24
}25if(a[k]==a[i])
29 a[j]=a[i];
30 sum=sum+j-k;
31 j--;
32break
; 33
} 34
} 35
if(flat==0
) 38
} 39
if(flat==0
)40 printf("
impossible");
41else
if(sum==0
)42 printf("0"
);43
else
44 printf("
%d\n
",sum);
45return
0;
46 }
完美的代價
問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串 才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美 的回文串。交換的定義是 交換兩個相鄰的字元,例如 mamad 第一次交換 ad mamda 第二次交換 md madma ...
完美的代價
問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元 例如mamad 第一次交換 ad mamda 第二次交換 md madma 第三次...
完美的代價
問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美的回文串。交換的定義是 交換兩個相鄰的字元。例如mamad 第一次交換 ad mamda 第二次交換 md madma 第三次...