蓝桥题目:B-19、完美的代价
程序员文章站
2022-06-12 20:47:27
...
#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;
}
上一篇: jQuery动态背景图片效果实现方法_jquery
下一篇: 十年前…十年后…你变了多少?