#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
string s;
cin >> s;
int i, j, k, l;//循环变量
int cnt = 0;//计数
j = n-1;
int flag = 0;
for(i = 0; i < n/2; ++i){//i和j作为搜索边界,k作为搜索坐标
for(k = j; k >= i; --k){//i不断增加,j不断减小,搜索范围不断收窄 ,所以i只需到n/2即可
if(k == i){
if(n%2 == 0 || flag == 1){//字符串有偶数个字符,或者已经有一个单独字符
cout << "Impossible";
return 0;
}
flag = 1;//标记单独字符
cnt += n/2 - i;//单独字符移到中间的步骤,
//因为字符后半段的调换,所以单独字符只可能出现在字符串前半段,后者已经在后半段被调换到正中间
}else if(s[k] == s[i]){
for(l = k; l < j; ++l){
swap(s[l], s[l+1]);
cnt++;
}
j--;//收窄末端
break;
}
}
}
cout << cnt;
return 0;
}
蓝桥题目:B-19、完美的代价
最新推荐文章于 2024-09-28 10:34:40 发布